﻿/*******************************************************************************
 * Copyright (c) 2000, 2004 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
module dwt.internal.win32.os;


public import dwt.internal.win32.wintypes;
public import dwt.internal.converter;

private import tango.sys.win32.UserGdi;
alias tango.sys.win32.UserGdi WINAPI;

private import dwt.internal.win32.winapi;
alias dwt.internal.win32.winapi DWINAPI;



// declare of Callback functions
extern (Windows) 
{
alias int function() Function0;
alias int function(void*) Function1;
alias int function(void*, int) Function2;
alias int function(void*, int, int) Function3;
alias int function(void*, int, int, int) Function4;
alias int function(void*, int, int, int, int) Function5;
alias int function(void*, int, int, int, int, int) Function6;
alias int function(void*, int, int, int, int, int, int) Function7;
alias int function(void*, int, int, int, int, int, int, int) Function8;
alias int function(void*, int, int, int, int, int, int, int, int) Function9;
}

extern (C) static void exit(int status);

public class LDWTRESULT {	
	public int value;
	// initalize ONE and ZERO in static OS.this();
	public static LDWTRESULT ONE;
	public static LDWTRESULT ZERO;
	public this (int value) { this.value = value; }
}

public class OS {
	
	/*
	* DWT Windows flags
	*/
	public static BOOL IsWin32s;
	public static BOOL IsWin95;
	public static BOOL IsWinNT;
	public static BOOL IsPPC_var;
	public static BOOL IsHPC;
	public static BOOL IsSP_var;
	public static BOOL IsDBLocale;
	public static int WIN32_MAJOR, WIN32_MINOR, WIN32_VERSION;
	public static int COMCTL32_MAJOR, COMCTL32_MINOR;
	public static int SHELL32_MAJOR, SHELL32_MINOR;
	
	version(ANSI) {
		public const BOOL IsUnicode = false;
	}else{
		public const BOOL IsUnicode = true;
	}

	version(WinCE){
		public const static BOOL IsWinCE = true;
	}else{
		public const static BOOL IsWinCE = false;
	}

	/*
	* Flags for Window API GetVersionEx()
	*/
	public static const int VER_PLATFORM_WIN32s = 0;
	public static const int VER_PLATFORM_WIN32_WINDOWS = 1;
	public static const int VER_PLATFORM_WIN32_NT = 2;
	public static const int VER_PLATFORM_WIN32_CE = 3;
	
	extern (Windows) alias int function(DLLVERSIONINFO *) DLLGETVERSIONPROC;
	
		
	/* Get the Windows version_ren and the flags */
	public static this() {
	{
		LDWTRESULT.ONE = new LDWTRESULT(1);
		LDWTRESULT.ZERO = new LDWTRESULT(0);		
	
		/*
		* Try the UNICODE version of GetVersionEx first
		* and then the ANSI version.  The UNICODE version
		* is present on all versions of Windows but is not
		* implemented on Win95/98/ME.
		* 
		* NOTE: The value of OSVERSIONINFO.sizeof cannot
		* be static final because it relies on the Windows
		* platform version to be initialized and IsUnicode
		* has not been calculated.  It must be initialized
		* here, after the platform is determined in order
		* for the value to be correct.
		*/
		
		OSVERSIONINFO info;
		info.dwOSVersionInfoSize = OSVERSIONINFO.sizeof;
		if(!OS.GetVersionEx(&info)){
			MessageBoxA(null, "DWT Unicode version applications can't run in a non-Unicode platform !", "Error", MB_OK|MB_ICONERROR);	
			exit(-1);
		}
		
		IsWin32s = (info.dwPlatformId == VER_PLATFORM_WIN32s);
		IsWin95 = (info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS);
		IsWinNT = (info.dwPlatformId == VER_PLATFORM_WIN32_NT);
//		IsWinCE = (info.dwPlatformId == VER_PLATFORM_WIN32_CE);
		IsSP_var = IsSP();
		IsPPC_var = IsPPC();
		IsHPC = (IsWinCE && !IsPPC_var && !IsSP_var);	
		WIN32_MAJOR = info.dwMajorVersion;
		WIN32_MINOR = info.dwMinorVersion;
		WIN32_VERSION = VERSION (WIN32_MAJOR, WIN32_MINOR);
//		IsUnicode = !IsWin32s && !IsWin95;	
		
		/* Get the DBCS flag */
		int index = 0;
		while (index <= 0xFF) {
			if (OS.IsDBCSLeadByte (cast(ubyte) index)) break;
			index++;
		}
		IsDBLocale = (index <= 0xFF);
	}
	
	/* Get the COMCTL32.DLL version_ren */
	{
		DLLVERSIONINFO dvi;
		dvi.cbSize = DLLVERSIONINFO.sizeof;
		dvi.dwMajorVersion = 4;
		dvi.dwMinorVersion = 0;
		HINSTANCE hModule = OS.LoadLibrary ("comctl32.dll");
		if (hModule !is null) {
			DLLGETVERSIONPROC DllGetVersion = cast(DLLGETVERSIONPROC)GetProcAddress (hModule, "DllGetVersion\0");
			if (DllGetVersion !is null) 
				(*DllGetVersion)(&dvi);
			OS.FreeLibrary (hModule);
		}
		COMCTL32_MAJOR = dvi.dwMajorVersion;
		COMCTL32_MINOR = dvi.dwMinorVersion;
	
	}
	
	/* Get the Shell32.DLL version_ren */
	{
		DLLVERSIONINFO dvi;
		dvi.cbSize = DLLVERSIONINFO.sizeof;
		dvi.dwMajorVersion = 4;
		HINSTANCE hModule = OS.LoadLibrary ("Shell32.dll");
		if (hModule !is null) {
			DLLGETVERSIONPROC DllGetVersion = cast(DLLGETVERSIONPROC)GetProcAddress (hModule, "DllGetVersion\0");
			if (DllGetVersion !is null)
				(*DllGetVersion)(&dvi);
			OS.FreeLibrary (hModule);
		}
		SHELL32_MAJOR = dvi.dwMajorVersion;
		SHELL32_MINOR = dvi.dwMinorVersion;		
	}
		// Init const var which can't be evaluated at compile time
		SYS_COLOR_INDEX_FLAG = OS.IsWinCE ? 0x40000000 : 0x0;
		BFFM_SETSELECTION = IsUnicode ? 0x467 : 0x466;
		BFFM_VALIDATEFAILED = IsUnicode ? 0x4 : 0x3;
		COLOR_3DDKSHADOW = 0x15 | SYS_COLOR_INDEX_FLAG;
		COLOR_3DFACE = 0xf | SYS_COLOR_INDEX_FLAG;
		COLOR_3DHIGHLIGHT = 0x14 | SYS_COLOR_INDEX_FLAG;
		COLOR_3DHILIGHT = 0x14 | SYS_COLOR_INDEX_FLAG;
		COLOR_3DLIGHT = 0x16 | SYS_COLOR_INDEX_FLAG;
		COLOR_3DSHADOW = 0x10 | SYS_COLOR_INDEX_FLAG;
		COLOR_ACTIVECAPTION = 0x2 | SYS_COLOR_INDEX_FLAG;
		COLOR_BTNFACE = 0xf | SYS_COLOR_INDEX_FLAG;
		COLOR_BTNHIGHLIGHT = 0x14 | SYS_COLOR_INDEX_FLAG;
		COLOR_BTNSHADOW = 0x10 | SYS_COLOR_INDEX_FLAG;
		COLOR_BTNTEXT = 0x12 | SYS_COLOR_INDEX_FLAG;
		COLOR_CAPTIONTEXT = 0x9 | SYS_COLOR_INDEX_FLAG;
		COLOR_GRADIENTACTIVECAPTION = 0x1b | SYS_COLOR_INDEX_FLAG;
		COLOR_GRADIENTINACTIVECAPTION = 0x1c | SYS_COLOR_INDEX_FLAG;
		COLOR_HIGHLIGHT = 0xd | SYS_COLOR_INDEX_FLAG;
		COLOR_HIGHLIGHTTEXT = 0xe | SYS_COLOR_INDEX_FLAG;
		COLOR_INACTIVECAPTION = 0x3 | SYS_COLOR_INDEX_FLAG;
		COLOR_INACTIVECAPTIONTEXT = 0x13 | SYS_COLOR_INDEX_FLAG;
		COLOR_INFOBK = 0x18 | SYS_COLOR_INDEX_FLAG;
		COLOR_INFOTEXT = 0x17 | SYS_COLOR_INDEX_FLAG;
		COLOR_MENU = 0x4 | SYS_COLOR_INDEX_FLAG;
		COLOR_MENUTEXT = 0x7 | SYS_COLOR_INDEX_FLAG;
		COLOR_SCROLLBAR = 0x0 | SYS_COLOR_INDEX_FLAG;
		COLOR_WINDOW = 0x5 | SYS_COLOR_INDEX_FLAG;
		COLOR_WINDOWFRAME = 0x6 | SYS_COLOR_INDEX_FLAG;
		COLOR_WINDOWTEXT = 0x8 | SYS_COLOR_INDEX_FLAG;
		HDN_BEGINTRACK = IsUnicode ? 0xfffffeba : 0xfffffece;
		HDN_DIVIDERDBLCLICK = IsUnicode ? HDN_DIVIDERDBLCLICKW : HDN_DIVIDERDBLCLICKA;
		HDN_ITEMCHANGED = IsUnicode ? 0xfffffebf : 0xfffffed3;
		HDN_ITEMDBLCLICK = IsUnicode ? HDN_ITEMDBLCLICKW : HDN_ITEMDBLCLICKA;
		LVM_GETCOLUMN = IsUnicode ? 0x105f : 0x1019;
		LVM_GETITEM = IsUnicode ? 0x104b : 0x1005;
		LVM_GETSTRINGWIDTH = IsUnicode ? 0x1057 : 0x1011;
		LVM_INSERTCOLUMN = IsUnicode ? 0x1061 : 0x101b;
		LVM_INSERTITEM = IsUnicode ? 0x104d : 0x1007;
		LVM_SETCOLUMN = IsUnicode ? 0x1060 : 0x101a;
		LVM_SETITEM = IsUnicode ? 0x104c : 0x1006;
		NOTIFYICONDATA_V2_SIZE = IsUnicode ? NOTIFYICONDATAW_V2_SIZE : NOTIFYICONDATAA_V2_SIZE;
		RB_GETBANDINFO = IsUnicode ? 0x41c : 0x41d;
		RB_INSERTBAND = IsUnicode ? 0x40a : 0x401;
		RB_SETBANDINFO = IsUnicode ? 0x40b : 0x406;
		SW_RESTORE = IsWinCE ? 0xd : 0x9;
		SW_SHOWMAXIMIZED = IsWinCE ? 0xb : 0x3;
		TB_ADDSTRING = IsUnicode ? 0x44d : 0x41c;
		TB_GETBUTTONINFO = IsUnicode ? 0x43f : 0x441;
		TB_GETBUTTONTEXT = IsUnicode ? 0x44b : 0x42d;
		TB_INSERTBUTTON = IsUnicode ? 0x443 : 0x415;
		TB_MAPACCELERATOR = 0x0400 + (IsUnicode ? 90 : 78);
		TB_SETBUTTONINFO = IsUnicode ? 0x440 : 0x442;
		TCM_INSERTITEM = IsUnicode ? 0x133e : 0x1307;
		TCM_SETITEM = IsUnicode ? 0x133d : 0x1306;
		TTM_ADDTOOL = IsUnicode ? 0x432 : 0x404;
		TTM_DELTOOL = IsUnicode ? 0x433 : 0x405;
		TTN_GETDISPINFO = IsUnicode ? 0xfffffdee : 0xfffffdf8;
		TVM_GETITEM = IsUnicode ? 0x113e : 0x110c;
		TVM_INSERTITEM = IsUnicode ? 0x1132 : 0x1100;
		TVM_SETITEM = IsUnicode ? 0x113f : 0x110d;
		TVN_BEGINDRAG = IsUnicode ? 0xfffffe38 : 0xfffffe69;
		TVN_BEGINRDRAG = IsUnicode ? 0xfffffe37 : 0xfffffe68;
		TVN_ITEMEXPANDING = IsUnicode ? 0xfffffe3a : 0xfffffe6b;
		TVN_SELCHANGED = IsUnicode ? 0xfffffe3d : 0xfffffe6e;
		TVN_SELCHANGING = IsUnicode ? 0xfffffe3e : 0xfffffe6f;
		WS_MAXIMIZEBOX = IsWinCE ? 0x20000 : 0x10000;
		WS_MINIMIZEBOX = IsWinCE ? 0x10000 : 0x20000;
		WS_OVERLAPPED = IsWinCE ? WS_BORDER | WS_CAPTION : 0x0;

		// call other static constructors
//		BidiUtil.staticCtor();
//		DWT.staticCtor();

		/**
		 * always do OleInitialize() in OLE_COM version
		 * <Shawn Liu>  20051227
		 */
		version(OLE_COM)
		{
			OS.OleInitialize(null);
		}
	}
	
	static BOOL IsSP()	{ return false; }
	static BOOL IsPPC() { return false; }
	
	/* Flag used on WinCE */
	static int SYS_COLOR_INDEX_FLAG;

	/*
	* NOTE:  There is a bug in JVM 1.2 where loading 
	* a class with a large number of constants causes
	* a segment fault to occur sometime later after
	* the class is loaded.  The fix is to break the
	* class up into a hierarchy of classes that each
	* contain a smaller number of constants.  This
	* fix is not necessary at this time but is required
	* when all constants are uncommented.  We have not
	* done the research to determine the limit.
	*/

	/* Constants */
	public static const int ALTERNATE = 1;
	public static const int BFFM_INITIALIZED = 0x1;
	public static int BFFM_SETSELECTION;
	public static int BFFM_VALIDATEFAILED;
	public static const int BFFM_VALIDATEFAILEDW = 0x4;
	public static const int BFFM_VALIDATEFAILEDA = 0x3;
	public static const int BF_BOTTOM = 0x8;
	public static const int BF_RIGHT = 0x4;
	public static const int BIF_EDITBOX = 0x10;
	public static const int BIF_NEWDIALOGSTYLE = 0x40;
	public static const int BIF_RETURNONLYFSDIRS = 0x1;
	public static const int BIF_VALIDATE = 0x20;
	public static const int BITSPIXEL = 0xc;
	public static const int BI_BITFIELDS = 3;
	public static const int BI_RGB = 0;
	public static const int BLACKNESS = 0x42;
	public static const int BM_CLICK = 0xf5;
	public static const int BM_GETCHECK = 0xf0;
	public static const int BM_SETCHECK = 0xf1;
	public static const int BM_SETIMAGE = 0xf7;
	public static const int BM_SETSTYLE = 0xf4;
	public static const int BN_CLICKED = 0x0;
	public static const int BN_DOUBLECLICKED = 0x5;
	public static const int BST_CHECKED = 0x1;
	public static const int BST_UNCHECKED = 0x0;
	public static const int BS_BITMAP = 0x80;
	public static const int BS_CENTER = 0x300;
	public static const int BS_CHECKBOX = 0x2;
	public static const int BS_DEFPUSHBUTTON = 0x1;
	public static const int BS_FLAT = 0x8000;
	public static const int BS_GROUPBOX = 0x7;
	public static const int BS_ICON = 0x40;
	public static const int BS_LEFT = 0x100;
	public static const int BS_NOTIFY = 0x4000;
	public static const int BS_OWNERDRAW = 0xb;
	public static const int BS_PUSHBUTTON = 0x0;
	public static const int BS_PUSHLIKE = 0x1000;
	public static const int BS_RADIOBUTTON = 0x4;
	public static const int BS_RIGHT = 0x200;
	public static const int BS_SOLID = 0x0;
	public static const int BTNS_AUTOSIZE = 0x10;
	public static const int BTNS_BUTTON = 0x0;
	public static const int BTNS_CHECK = 0x2;
	public static const int BTNS_CHECKGROUP = 0x6;
	public static const int BTNS_DROPDOWN = 0x8;
	public static const int BTNS_GROUP = 0x4;
	public static const int BTNS_SEP = 0x1;
	public static const int BTNS_SHOWTEXT = 0x40;
	public static const int CBN_EDITCHANGE = 0x5;
	public static const int CBN_KILLFOCUS = 0x4;
	public static const int CBN_SELCHANGE = 0x1;
	public static const int CBN_SETFOCUS = 0x3;
	public static const int CBN_DROPDOWN = 0x7;
	public static const int CBS_AUTOHSCROLL = 0x40;
	public static const int CBS_DROPDOWN = 0x2;
	public static const int CBS_DROPDOWNLIST = 0x3;
	public static const int CBS_NOINTEGRALHEIGHT = 0x400;
	public static const int CBS_SIMPLE = 0x1;
	public static const int CB_ADDSTRING = 0x143;
	public static const int CB_DELETESTRING = 0x144;
	public static const int CB_ERR = 0xffffffff;
	public static const int CB_ERRSPACE = 0xfffffffe;
	public static const int CB_FINDSTRINGEXACT = 0x158;
	public static const int CB_GETCOUNT = 0x146;
	public static const int CB_GETCURSEL = 0x147;
	public static const int CB_GETDROPPEDCONTROLRECT = 0x152;
	public static const int CB_GETDROPPEDSTATE = 0x157;
	public static const int CB_GETEDITSEL = 0x140;
	public static const int CB_GETITEMHEIGHT = 0x154;
	public static const int CB_GETLBTEXT = 0x148;
	public static const int CB_GETLBTEXTLEN = 0x149;
	public static const int CB_INSERTSTRING = 0x14a;
	public static const int CB_LIMITTEXT = 0x141;
	public static const int CB_RESETCONTENT = 0x14b;
	public static const int CB_SELECTSTRING = 0x14d;
	public static const int CB_SETCURSEL = 0x14e;
	public static const int CB_SETDROPPEDWIDTH = 0x0160;
	public static const int CB_SETEDITSEL = 0x142;
	public static const int CB_SHOWDROPDOWN = 0x14f;
	public static const int CCM_FIRST = 0x2000;
	public static const int CCM_SETBKCOLOR = 0x2001;
	public static const int CCM_SETVERSION = 0x2007;
	public static const int CCS_NODIVIDER = 0x40;
	public static const int CCS_NORESIZE = 0x4;
	public static const int CC_ANYCOLOR = 0x100;
	public static const int CC_ENABLEHOOK = 0x10;
	public static const int CC_RGBINIT = 0x1;
	public static const int CDDS_POSTERASE = 0x00000004;
	public static const int CDDS_PREERASE = 0x00000003;
	public static const int CDDS_PREPAINT = 0x00000001;
	public static const int CDDS_ITEM = 0x00010000;
	public static const int CDDS_ITEMPREPAINT = CDDS_ITEM | CDDS_PREPAINT;
	public static const int CDDS_SUBITEM = 0x00020000;
	public static const int CDRF_DODEFAULT = 0x00000000;
	public static const int CDRF_NEWFONT = 0x00000002;
	public static const int CDRF_NOTIFYITEMDRAW = 0x00000020;
	public static const int CDRF_NOTIFYPOSTERASE = 0x00000040;
	public static const int CDRF_NOTIFYSUBITEMDRAW = 0x00000020;
	public static const int CFE_AUTOCOLOR = 0x40000000;
	public static const int CFE_ITALIC = 0x2;
	public static const int CFE_STRIKEOUT = 0x8;
	public static const int CFE_UNDERLINE = 0x4;
	public static const int CFM_BOLD = 0x1;
	public static const int CFM_CHARSET = 0x8000000;
	public static const int CFM_COLOR = 0x40000000;
	public static const int CFM_FACE = 0x20000000;
	public static const int CFM_ITALIC = 0x2;
	public static const int CFM_SIZE = 0x80000000;
	public static const int CFM_STRIKEOUT = 0x8;
	public static const int CFM_UNDERLINE = 0x4;
	public static const int CFM_WEIGHT = 0x400000;
	public static const int CFS_POINT = 0x2;
	public static const int CF_EFFECTS = 0x100;
	public static const int CF_INITTOLOGFONTSTRUCT = 0x40;
	public static const int CF_ENABLEHOOK = 0x00000008;
	public static const int CF_SCREENFONTS = 0x1;
	public static const int CF_TEXT = 0x1;
	public static const int CF_UNICODETEXT = 13;
	public static const int CF_USESTYLE = 0x80;
	public static const int CLR_DEFAULT = 0xff000000;
	public static const int CLR_INVALID = 0xffffffff;
	public static const int COLORONCOLOR = 0x3;
	public static int COLOR_3DDKSHADOW;
	public static int COLOR_3DFACE;
	public static int COLOR_3DHIGHLIGHT;
	public static int COLOR_3DHILIGHT;
	public static int COLOR_3DLIGHT;
	public static int COLOR_3DSHADOW;
	public static int COLOR_ACTIVECAPTION;
	public static int COLOR_BTNFACE;
	public static int COLOR_BTNHIGHLIGHT;
	public static int COLOR_BTNSHADOW;
	public static int COLOR_BTNTEXT;
	public static int COLOR_CAPTIONTEXT;
	public static int COLOR_GRADIENTACTIVECAPTION;
	public static int COLOR_GRADIENTINACTIVECAPTION;
	public static int COLOR_HIGHLIGHT;
	public static int COLOR_HIGHLIGHTTEXT;
	public static int COLOR_INACTIVECAPTION;
	public static int COLOR_INACTIVECAPTIONTEXT;
	public static int COLOR_INFOBK;
	public static int COLOR_INFOTEXT;
	public static int COLOR_MENU;
	public static int COLOR_MENUTEXT;
	public static int COLOR_SCROLLBAR;
	public static int COLOR_WINDOW;
	public static int COLOR_WINDOWFRAME;
	public static int COLOR_WINDOWTEXT;
	public static const int COMPLEXREGION = 0x3;
	public static const int CP_ACP = 0x0;
	public static const int CP_UTF8 = 65001;
	public static const int CP_INSTALLED = 0x1;
	public static const int CS_BYTEALIGNWINDOW = 0x2000;
	public static const int CS_DBLCLKS = 0x8;
	public static const int CS_GLOBALCLASS = 0x4000;
	public static const int CS_HREDRAW = 0x2;
	public static const int CS_VREDRAW = 0x1;
	public static const int CW_USEDEFAULT = 0x80000000;
	public static const int DCX_CACHE = 0x2;
	public static const int DCX_CLIPCHILDREN = 0x8;
	public static const int DCX_CLIPSIBLINGS = 0x10;
	public static const int DEFAULT_CHARSET = 0x1;
	public static const int DEFAULT_GUI_FONT = 0x11;
	public static const int DFCS_BUTTONCHECK = 0x0;
	public static const int DFCS_CHECKED = 0x400;
	public static const int DFCS_FLAT = 0x4000;
	public static const int DFCS_INACTIVE = 0x100;
	public static const int DFCS_PUSHED = 0x200;
	public static const int DFCS_SCROLLDOWN = 0x1;
	public static const int DFCS_SCROLLLEFT = 0x2;
	public static const int DFCS_SCROLLRIGHT = 0x3;
	public static const int DFCS_SCROLLUP = 0x0;
	public static const int DFC_BUTTON = 0x4;
	public static const int DFC_SCROLL = 0x3;
	public static const int DIB_RGB_COLORS = 0x0;
	public static const int DISP_E_EXCEPTION = 0x80020009;
	public static const int DI_NORMAL = 0x3;
	public static const int DLGC_BUTTON = 0x2000;
	public static const int DLGC_HASSETSEL = 0x8;
	public static const int DLGC_STATIC = 0x100;
	public static const int DLGC_WANTALLKEYS = 0x4;
	public static const int DLGC_WANTARROWS = 0x1;
	public static const int DLGC_WANTCHARS = 0x80;
	public static const int DLGC_WANTTAB = 0x2;
	public static const int DM_SETDEFID = 0x401;
	public static const int DSS_DISABLED = 0x20;
	public static const int DSTINVERT = 0x550009;
	public static const int DST_BITMAP = 0x4;
	public static const int DST_ICON = 0x3;
	public static const int DT_CALCRECT = 0x400;
	public static const int DT_EDITCONTROL = 0x2000;
	public static const int DT_EXPANDTABS = 0x40;
	public static const int DT_LEFT = 0x0;
	public static const int DT_NOPREFIX = 0x800;
	public static const int DT_RASPRINTER = 0x2;	
	public static const int DT_SINGLELINE = 0x20;
	public static const int DT_WORDBREAK = 0x10;
	public static const int ECOOP_AND = 0x3;
	public static const int ECOOP_OR = 0x2;
	public static const int ECO_AUTOHSCROLL = 0x80;
	public static const int EDGE_ETCHED = 0x6;
	public static const int EDGE_SUNKEN = 0xa;
	public static const int EM_CANUNDO = 0xc6;
	public static const int EM_CHARFROMPOS = 0xd7;
	public static const int EM_DISPLAYBAND = 0x433;
	public static const int EM_GETFIRSTVISIBLELINE = 0xce;
	public static const int EM_GETLIMITTEXT = 0xd5;
	public static const int EM_GETLINE = 0xc4;
	public static const int EM_GETLINECOUNT = 0xba;
	public static const int EM_GETMARGINS = 0xd4;
	public static const int EM_GETPASSWORDCHAR = 0xd2;
	public static const int EM_GETSCROLLPOS = 0x4dd;
	public static const int EM_GETSEL = 0xb0;
	public static const int EM_LIMITTEXT = 0xc5;
	public static const int EM_LINEFROMCHAR = 0xc9;
	public static const int EM_LINEINDEX = 0xbb;
	public static const int EM_LINELENGTH = 0xc1;
	public static const int EM_LINESCROLL = 0xb6;
	public static const int EM_POSFROMCHAR = 0xd6;
	public static const int EM_REPLACESEL = 0xc2;
	public static const int EM_SCROLLCARET = 0xb7;
	public static const int EM_SETBKGNDCOLOR = 0x443;
	public static const int EM_SETLIMITTEXT = 0xc5;
	public static const int EM_SETOPTIONS = 0x44d;
	public static const int EM_SETPARAFORMAT = 0x447;
	public static const int EM_SETPASSWORDCHAR = 0xcc;
	public static const int EM_SETREADONLY = 0xcf;
	public static const int EM_SETSEL = 0xb1;
	public static const int EM_SETTABSTOPS = 0xcb;
	public static const int EN_ALIGN_LTR_EC = 0x0700;
	public static const int EN_ALIGN_RTL_EC = 0x0701;
	public static const int EN_CHANGE = 0x300;
	public static const int ERROR_NO_MORE_ITEMS = 0x103;
	public static const int ESB_DISABLE_BOTH = 0x3;
	public static const int ESB_ENABLE_BOTH = 0x0;
	public static const int ES_AUTOHSCROLL = 0x80;
	public static const int ES_AUTOVSCROLL = 0x40;
	public static const int ES_CENTER = 0x1;
	public static const int ES_MULTILINE = 0x4;
	public static const int ES_NOHIDESEL = 0x100;
	public static const int ES_PASSWORD = 0x20;
	public static const int ES_READONLY = 0x800;
	public static const int ES_RIGHT = 0x2;
	public static const int ETO_CLIPPED = 0x4;	
	public static const int EVENT_OBJECT_FOCUS = 0x8005;
	public static const int EVENT_OBJECT_LOCATIONCHANGE = 0x800B;
//	public static final int EVENT_OBJECT_SELECTION = 0x8006;
	public static const int EVENT_OBJECT_SELECTIONWITHIN = 0x8009;
	public static const int EVENT_OBJECT_VALUECHANGE = 0x800E;
	public static const int FALT = 0x10;
	public static const int FCONTROL = 0x8;
	public static const int FNERR_INVALIDFILENAME = 0x3002;
	public static const int FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100;
	public static const int FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000;
	public static const int FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200;
	public static const int FSHIFT = 0x4;
	public static const int FVIRTKEY = 0x1;
	public static const int GCS_COMPSTR = 0x8;
	public static const int GCS_RESULTSTR = 0x800;
	public static const int GMDI_USEDISABLED = 0x1;
	public static const int GMEM_FIXED = 0x0;
	public static const int GMEM_ZEROINIT = 0x40;
	public static const int GN_CONTEXTMENU = 1000;
	public static const int GPTR = 0x40;
	public static const int GRADIENT_FILL_RECT_H = 0x0;
	public static const int GRADIENT_FILL_RECT_V = 0x1;
	public static const int GTL_NUMBYTES = 0x10;
	public static const int GTL_NUMCHARS = 0x8;
	public static const int GTL_PRECISE = 0x2;
	public static const int GT_DEFAULT = 0x0;
	public static const int GUI_16BITTASK = 0x20;
	public static const int GUI_CARETBLINKING = 0x1;
	public static const int GUI_INMENUMODE = 0x4;
	public static const int GUI_INMOVESIZE = 0x2;
	public static const int GUI_POPUPMENUMODE = 0x10;
	public static const int GUI_SYSTEMMENUMODE = 0x8;
	public static const int GWL_EXSTYLE = 0xffffffec;
	public static const int GWL_ID = -12;
	public static const int GWL_STYLE = 0xfffffff0;
	public static const int GWL_USERDATA = 0xffffffeb;
	public static const int GWL_WNDPROC = 0xfffffffc;
	public static const int GW_HWNDFIRST = 0x0;
	public static const int GW_HWNDLAST = 0x1;
	public static const int GW_HWNDNEXT = 0x2;
	public static const int GW_HWNDPREV = 0x3;
	public static const int GW_OWNER = 0x4;
	public static const int GW_CHILD = 0x5;
	public static const HBITMAP HBMMENU_CALLBACK = cast(HBITMAP)-1;
	public static const int HCF_HIGHCONTRASTON = 0x1;
	public static const int HDF_BITMAP = 0x2000;
	public static const int HDF_BITMAP_ON_RIGHT = 0x1000;
	public static const int HDF_CENTER = 2;
	public static const int HDF_JUSTIFYMASK = 0x3;
	public static const int HDF_IMAGE = 0x0800;
	public static const int HDF_LEFT = 0;
	public static const int HDF_RIGHT = 1;
	public static const int HDF_SORTUP = 0x0400;
	public static const int HDF_SORTDOWN = 0x0200;	
	public static const int HDI_BITMAP = 0x0010;
	public static const int HDI_IMAGE = 32;
	public static const int HDI_ORDER = 0x80;
	public static const int HDI_TEXT = 0x2;
	public static const int HDI_WIDTH = 0x1;
	public static const int HDI_FORMAT = 0x4;
	public static const int HDM_FIRST = 0x1200;
	public static const int HDM_DELETEITEM = HDM_FIRST + 2;
	public static const int HDM_GETBITMAPMARGIN = HDM_FIRST + 21;
	public static const int HDM_GETITEMCOUNT = 0x1200;
	public static const int HDM_GETITEMA = HDM_FIRST + 3;
	public static const int HDM_GETITEMW = HDM_FIRST + 11;
	public static const int HDM_GETITEM = IsUnicode ? HDM_GETITEMW : HDM_GETITEMA;
	public static const int HDM_GETITEMRECT = HDM_FIRST + 7;
	public static const int HDM_GETORDERARRAY = HDM_FIRST + 17;
	public static const int HDM_INSERTITEMA = HDM_FIRST + 1;
	public static const int HDM_INSERTITEMW = HDM_FIRST + 10;
	public static const int HDM_INSERTITEM = IsUnicode ? HDM_INSERTITEMW : HDM_INSERTITEMA;
	public static const int HDM_LAYOUT = HDM_FIRST + 5;
	public static const int HDM_ORDERTOINDEX = HDM_FIRST + 15;
	public static const int HDM_SETIMAGELIST = HDM_FIRST + 8;
	public static const int HDM_SETITEMA = HDM_FIRST + 4;
	public static const int HDM_SETITEMW = HDM_FIRST + 12;
	public static const int HDM_SETITEM = IsUnicode ? HDM_SETITEMW : HDM_SETITEMA;
	public static const int HDM_SETORDERARRAY = HDM_FIRST + 18;	
	public static const int HDN_FIRST = 0xfffffed4;
	public static int HDN_BEGINTRACK;
	public static const int HDN_BEGINTRACKW = 0xfffffeba;
	public static const int HDN_BEGINTRACKA = 0xfffffece;
	public static const int HDN_DIVIDERDBLCLICKA = HDN_FIRST - 5;
	public static const int HDN_DIVIDERDBLCLICKW = HDN_FIRST - 25;
	public static int HDN_DIVIDERDBLCLICK;
	public static int HDN_ITEMCHANGED;
	public static const int HDN_ITEMCHANGEDW = 0xfffffebf;
	public static const int HDN_ITEMCHANGEDA = 0xfffffed3;
	public static const int HDN_ITEMDBLCLICKW = HDN_FIRST - 23;
	public static const int HDN_ITEMDBLCLICKA = HDN_FIRST - 3;
	public static int HDN_ITEMDBLCLICK;
	public static const int HEAP_ZERO_MEMORY = 0x8;
	public static const int HELPINFO_MENUITEM = 0x2;
	public static const int HINST_COMMCTRL = 0xffffffff;
	public static const HKEY HKEY_CLASSES_ROOT = cast(HKEY)0x80000000;
	public static const HKEY HKEY_CURRENT_USER = cast(HKEY)0x80000001;
	public static const HKEY HKEY_LOCAL_MACHINE = cast(HKEY)0x80000002;
	public static const int HORZRES = 0x8;
	public static const int HTBORDER = 0x12;
	public static const int HTCAPTION = 0x2;
	public static const int HTCLIENT = 0x1;
	public static const int HTERROR = -2;
	public static const int HTHSCROLL = 0x6;
	public static const int HTMENU = 0x5;
	public static const int HTNOWHERE = 0x0;
	public static const int HTSYSMENU = 0x3;        
	public static const int HTTRANSPARENT = 0xffffffff;
	public static const int HTVSCROLL = 0x7;
	public static const HWND HWND_BOTTOM = cast(HWND)0x1;
	public static const HWND HWND_TOP = cast(HWND)0x0;
	public static const HWND HWND_TOPMOST = cast(HWND)0xffffffff;
	public static const HWND HWND_NOTOPMOST = cast(HWND)-2;
	public static const int ICC_COOL_CLASSES = 0x400;
	public static const int ICC_STANDARD_CLASSES = 0x00004000;
	public static const int ICM_NOTOPEN = 0x0;
	public static const int ICON_BIG = 0x1;
	public static const int ICON_SMALL = 0x0;
	public static const int I_IMAGECALLBACK = -1;
	public static const int I_IMAGENONE = -2;
	public static const int IDABORT = 0x3;
	public static const int IDB_STD_SMALL_COLOR = 0x0;
	public static const TCHAR* IDC_APPSTARTING = cast(TCHAR*)0x7f8a;
	public static const TCHAR* IDC_ARROW 	= cast(TCHAR*)0x7f00;
	public static const TCHAR* IDC_CROSS 	= cast(TCHAR*)0x7f03;
	public static const TCHAR* IDC_HAND 	= cast(TCHAR*)0x7f89;
	public static const TCHAR* IDC_HELP 	= cast(TCHAR*)0x7f8b;
	public static const TCHAR* IDC_IBEAM 	= cast(TCHAR*)0x7f01;
	public static const TCHAR* IDC_NO 		= cast(TCHAR*)0x7f88;
	public static const TCHAR* IDC_SIZE 	= cast(TCHAR*)0x7f80;
	public static const TCHAR* IDC_SIZEALL 	= cast(TCHAR*)0x7f86;
	public static const TCHAR* IDC_SIZENESW = cast(TCHAR*)0x7f83;
	public static const TCHAR* IDC_SIZENS 	= cast(TCHAR*)0x7f85;
	public static const TCHAR* IDC_SIZENWSE = cast(TCHAR*)0x7f82;
	public static const TCHAR* IDC_SIZEWE 	= cast(TCHAR*)0x7f84;
	public static const TCHAR* IDC_UPARROW 	= cast(TCHAR*)0x7f04;
	public static const TCHAR* IDC_WAIT 	= cast(TCHAR*)0x7f02;
	public static const int IDNO = 0x7;
	public static const int IDOK = 0x1;
	public static const int IDRETRY = 0x4;
	public static const int IDYES = 0x6;
	public static const int ILC_COLOR = 0x0;
	public static const int ILC_COLOR16 = 0x10;
	public static const int ILC_COLOR24 = 0x18;
	public static const int ILC_COLOR32 = 0x20;
	public static const int ILC_COLOR4 = 0x4;
	public static const int ILC_COLOR8 = 0x8;
	public static const int ILC_MASK = 0x1;
	public static const int ILD_NORMAL = 0x0;
	public static const int IMAGE_BITMAP = 0x0;
	public static const int IMAGE_CURSOR = 0x2;
	public static const int IMAGE_ICON = 0x1;
	public static const int IME_CMODE_FULLSHAPE = 0x8;
	public static const int IME_CMODE_KATAKANA = 0x2;
	public static const int IME_CMODE_NATIVE = 0x1;
	public static const int IME_CMODE_ROMAN = 0x10;
	public static const int INFINITE = 0xffffffff;
	public static const int INPUT_KEYBOARD = 1;
	public static const int INPUT_MOUSE = 0;
	alias tango.sys.win32.Types.INVALID_HANDLE_VALUE INVALID_HANDLE_VALUE;

	public static const int KEY_ENUMERATE_SUB_KEYS = 0x8;
	public static const int KEY_NOTIFY = 0x10;
	public static const int KEY_QUERY_VALUE = 0x1;
	public static const int KEY_READ = 0x20019;
	public static const int KEYEVENTF_KEYUP = 0x0002;
	public static const int LANG_NEUTRAL = 0x0;
	public static const int LANG_USER_DEFAULT = 1 << 10;
	public static const int LAYOUT_RTL = 0x1;
	public static const int LBN_DBLCLK = 0x2;
	public static const int LBN_SELCHANGE = 0x1;
	public static const int LBS_EXTENDEDSEL = 0x800;
	public static const int LBS_MULTIPLESEL = 0x8;
	public static const int LBS_NOINTEGRALHEIGHT = 0x100;
	public static const int LBS_NOTIFY = 0x1;
	public static const int LB_ADDSTRING = 0x180;
	public static const int LB_DELETESTRING = 0x182;
	public static const int LB_ERR = 0xffffffff;
	public static const int LB_ERRSPACE = 0xfffffffe;
	public static const int LB_FINDSTRINGEXACT = 0x1a2;
	public static const int LB_GETCARETINDEX = 0x19f;
	public static const int LB_GETCOUNT = 0x18b;
	public static const int LB_GETCURSEL = 0x188;
	public static const int LB_GETHORIZONTALEXTENT = 0x193;
	public static const int LB_GETITEMHEIGHT = 0x1a1;
	public static const int LB_GETITEMRECT = 0x198;
	public static const int LB_GETSEL = 0x187;
	public static const int LB_GETSELCOUNT = 0x190;
	public static const int LB_GETSELITEMS = 0x191;
	public static const int LB_GETTEXT = 0x189;
	public static const int LB_GETTEXTLEN = 0x18a;
	public static const int LB_GETTOPINDEX = 0x18e;
	public static const int LB_INITSTORAGE = 0x1a8;
	public static const int LB_INSERTSTRING = 0x181;
	public static const int LB_RESETCONTENT = 0x184;
	public static const int LB_SELITEMRANGE = 0x19b;
	public static const int LB_SELITEMRANGEEX = 0x183;
	public static const int LB_SETCARETINDEX = 0x19e;
	public static const int LB_SETCURSEL = 0x186;
	public static const int LB_SETHORIZONTALEXTENT = 0x194;
	public static const int LB_SETSEL = 0x185;
	public static const int LB_SETTOPINDEX = 0x197;
	public static const uint LF_FACESIZE = 32;
	public static const int LGRPID_ARABIC = 0xd;
	public static const int LGRPID_HEBREW = 0xc;
	public static const int LGRPID_INSTALLED = 1;
	public static const int LCID_SUPPORTED = 0x2;
	public static const int LOCALE_IDEFAULTANSICODEPAGE = 0x1004;
	public static const int LOCALE_SISO3166CTRYNAME = 0x5a;
	public static const int LOCALE_SISO639LANGNAME = 0x59;
	public static const int LOGPIXELSX = 0x58;
	public static const int LOGPIXELSY = 0x5a;
	public static const TCHAR* LPSTR_TEXTCALLBACK = cast(TCHAR*)-1L;
	public static const int LR_DEFAULTCOLOR = 0x0;
	public static const int LR_SHARED = 0x8000;
	public static const int LVCFMT_BITMAP_ON_RIGHT = 0x1000;
	public static const int LVCFMT_CENTER = 0x2;
	public static const int LVCFMT_IMAGE = 0x800;
	public static const int LVCFMT_LEFT = 0x0;
	public static const int LVCFMT_RIGHT = 0x1;
	public static const int LVCF_FMT = 0x1;
	public static const int LVCF_IMAGE = 0x10;
	public static const int LVCFMT_JUSTIFYMASK = 0x3;
	public static const int LVCF_TEXT = 0x4;
	public static const int LVCF_WIDTH = 0x2;
	public static const int LVHT_ONITEM = 0xe;
	public static const int LVHT_ONITEMICON = 0x2;
	public static const int LVHT_ONITEMLABEL = 0x4;
	public static const int LVHT_ONITEMSTATEICON = 0x8;
	public static const int LVIF_IMAGE = 0x2;
	public static const int LVIF_INDENT = 0x10;
	public static const int LVIF_STATE = 0x8;
	public static const int LVIF_TEXT = 0x1;
	public static const int LVIR_BOUNDS = 0x0;
	public static const int LVIR_ICON = 0x1;
	public static const int LVIR_LABEL = 0x2;
	public static const int LVIS_DROPHILITED = 0x8;
	public static const int LVIS_FOCUSED = 0x1;
	public static const int LVIS_SELECTED = 0x2;
	public static const int LVIS_STATEIMAGEMASK = 0xf000;
	public static const int LVM_APPROXIMATEVIEWRECT = 0x1040;
	public static const int LVM_DELETEALLITEMS = 0x1009;
	public static const int LVM_DELETECOLUMN = 0x101c;
	public static const int LVM_DELETEITEM = 0x1008;
	public static const int LVM_ENSUREVISIBLE = 0x1013;
	public static const int LVM_FIRST = 0x1000;
	public static const int LVM_GETBKCOLOR = 0x1000;
	public static int LVM_GETCOLUMN;
	public static const int LVM_GETCOLUMNWIDTH = 0x101d;
	public static const int LVM_GETCOUNTPERPAGE = 0x1028;
	public static const int LVM_GETEXTENDEDLISTVIEWSTYLE = 0x1037;
	public static const int LVM_GETHEADER = 0x101f;
	public static const int LVM_GETIMAGELIST = 0x1002;
	public static int LVM_GETITEM;
	public static const int LVM_GETITEMW = 0x104b;
	public static const int LVM_GETITEMA = 0x1005;
	public static const int LVM_GETITEMCOUNT = 0x1004;
	public static const int LVM_GETITEMRECT = 0x100e;
	public static const int LVM_GETITEMSTATE = 0x102c;
	public static const int LVM_GETNEXTITEM = 0x100c;
	public static const int LVM_GETSELECTEDCOUNT = 0x1032;
	public static int LVM_GETSTRINGWIDTH;
	public static const int LVM_GETSUBITEMRECT = 0x1038;
	public static const int LVM_GETTEXTCOLOR = 0x1023;
	public static const int LVM_GETTOOLTIPS = 0x104e;
	public static const int LVM_GETTOPINDEX = 0x1027;
	public static const int LVM_HITTEST = 0x1012;
	public static int LVM_INSERTCOLUMN;
	public static int LVM_INSERTITEM;
	public static const int LVM_REDRAWITEMS = LVM_FIRST + 21;
	public static const int LVM_SCROLL = 0x1014;
	public static const int LVM_SETBKCOLOR = 0x1001;
	public static const int LVM_SETCALLBACKMASK = LVM_FIRST + 11;
	public static int LVM_SETCOLUMN;
	public static const int LVM_SETCOLUMNWIDTH = 0x101e;
	public static const int LVM_SETEXTENDEDLISTVIEWSTYLE = 0x1036;
	public static const int LVM_SETIMAGELIST = 0x1003;
	public static int LVM_SETITEM;
	public static const int LVM_SETITEMCOUNT = LVM_FIRST + 47;
	public static const int LVM_SETITEMSTATE = 0x102b;
	public static const int LVM_SETTEXTBKCOLOR = 0x1026;
	public static const int LVM_SETTEXTCOLOR = 0x1024;
	public static const int LVNI_FOCUSED = 0x1;
	public static const int LVNI_SELECTED = 0x2;
	public static const int LVN_BEGINDRAG = 0xffffff93;
	public static const int LVN_BEGINRDRAG = 0xffffff91;
	public static const int LVN_COLUMNCLICK = 0xffffff94;
	public static const int LVN_FIRST = 0xffffff9c;
	public static const int LVN_GETDISPINFOA = LVN_FIRST - 50;
	public static const int LVN_GETDISPINFOW = LVN_FIRST - 77;
	public static const int LVN_ITEMACTIVATE = 0xffffff8e;
	public static const int LVN_ITEMCHANGED = 0xffffff9b;
	public static const int LVN_MARQUEEBEGIN = 0xffffff64;
	public static const int LVN_ODFINDITEMA = LVN_FIRST - 52;
	public static const int LVN_ODFINDITEMW = LVN_FIRST - 79;
	public static const int LVSCW_AUTOSIZE = 0xffffffff;
	public static const int LVSCW_AUTOSIZE_USEHEADER = 0xfffffffe;
	public static const int LVSICF_NOINVALIDATEALL = 0x1;
	public static const int LVSICF_NOSCROLL = 0x2;
	public static const int LVSIL_SMALL = 0x1;
	public static const int LVSIL_STATE = 0x2;
	public static const int LVS_EX_FULLROWSELECT = 0x20;
	public static const int LVS_EX_GRIDLINES = 0x1;
	public static const int LVS_EX_LABELTIP = 0x4000;
	public static const int LVS_EX_ONECLICKACTIVATE = 0x40;
	public static const int LVS_EX_SUBITEMIMAGES = 0x2;
	public static const int LVS_EX_TRACKSELECT = 0x8;
	public static const int LVS_EX_TWOCLICKACTIVATE = 0x80;
	public static const int LVS_NOCOLUMNHEADER = 0x4000;
	public static const int LVS_NOSCROLL = 0x2000;
	public static const int LVS_OWNERDATA = 0x1000;
	public static const int LVS_REPORT = 0x1;
	public static const int LVS_SHAREIMAGELISTS = 0x40;
	public static const int LVS_SHOWSELALWAYS = 0x8;
	public static const int LVS_SINGLESEL = 0x4;
	public static const int MAX_PATH = 260;
	public static const int MA_NOACTIVATE = 0x3;
	public static const int MB_ABORTRETRYIGNORE = 0x2;
	public static const int MB_APPLMODAL = 0x0;
	public static const int MB_ICONERROR = 0x10;
	public static const int MB_ICONINFORMATION = 0x40;
	public static const int MB_ICONQUESTION = 0x20;
	public static const int MB_ICONWARNING = 0x30;
	public static const int MB_OK = 0x0;
	public static const int MB_OKCANCEL = 0x1;
	public static const int MB_PRECOMPOSED = 0x1;
	public static const int MB_RETRYCANCEL = 0x5;
	public static const int MB_RTLREADING = 0x100000;
	public static const int MB_SYSTEMMODAL = 0x1000;
	public static const int MB_TASKMODAL = 0x2000;
	public static const int MB_YESNO = 0x4;
	public static const int MB_YESNOCANCEL = 0x3;
	public static const int MDIS_ALLCHILDSTYLES = 0x0001;
	public static const int MFS_CHECKED = 0x8;
	public static const int MFS_DISABLED = 0x3;
	public static const int MFS_GRAYED = 0x3;
	public static const int MFT_RADIOCHECK = 0x200;
	public static const int MFT_RIGHTJUSTIFY = 0x4000;
	public static const int MFT_RIGHTORDER = 0x2000; 
	public static const int MFT_SEPARATOR = 0x800;
	public static const int MFT_STRING = 0x0;
	public static const int MF_BYCOMMAND = 0x0;
	public static const int MF_BYPOSITION = 0x400;
	public static const int MF_CHECKED = 0x8;
	public static const int MF_DISABLED = 0x2;
	public static const int MF_ENABLED = 0x0;
	public static const int MF_GRAYED = 0x1;
	public static const int MF_HILITE = 0x80;
	public static const int MF_POPUP = 0x10;
	public static const int MF_SEPARATOR = 0x800;
	public static const int MF_SYSMENU = 0x2000;
	public static const int MF_UNCHECKED = 0x0;
	public static const int MIIM_BITMAP = 0x80;
	public static const int MIIM_DATA = 0x20;
	public static const int MIIM_ID = 0x2;
	public static const int MIIM_STATE = 0x1;
	public static const int MIIM_SUBMENU = 0x4;
	public static const int MIIM_TYPE = 0x10;
	public static const int MIM_STYLE = 0x10;
	public static const int MK_CONTROL = 0x8;
	public static const int MK_LBUTTON = 0x1;
	public static const int MK_MBUTTON = 0x10;
	public static const int MK_RBUTTON = 0x2;
	public static const int MK_SHIFT = 0x4;
	public static const int MM_TEXT = 0x1;
	public static const int MNC_CLOSE = 0x1;
	public static const int MNS_CHECKORBMP = 0x4000000;
	public static const int MONITOR_DEFAULTTONEAREST = 0x2;
	public static const int MONITORINFOF_PRIMARY = 0x1;
	public static const int MOUSEEVENTF_ABSOLUTE = 0x8000;
	public static const int MOUSEEVENTF_LEFTDOWN = 0x0002; 
	public static const int MOUSEEVENTF_LEFTUP = 0x0004; 
	public static const int MOUSEEVENTF_MIDDLEDOWN = 0x0020; 
	public static const int MOUSEEVENTF_MIDDLEUP = 0x0040; 
	public static const int MOUSEEVENTF_MOVE = 0x0001;
	public static const int MOUSEEVENTF_RIGHTDOWN = 0x0008; 
	public static const int MOUSEEVENTF_RIGHTUP = 0x0010; 
	public static const int MWMO_INPUTAVAILABLE = 0x4;
	public static const int NIF_ICON = 0x00000002;
	public static const int NIF_INFO = 0x00000010;
	public static const int NIF_MESSAGE = 0x00000001;
	public static const int NIF_STATE = 0x00000008;
	public static const int NIF_TIP = 0x00000004;
	public static const int NIIF_ERROR = 0x00000003;
	public static const int NIIF_INFO = 0x00000001;
	public static const int NIIF_NONE = 0x00000000;
	public static const int NIIF_WARNING = 0x00000002;
	public static const int NIM_ADD = 0x00000000;
	public static const int NIM_DELETE = 0x00000002;
	public static const int NIM_MODIFY = 0x00000001;
	public static const int NIS_HIDDEN = 0x00000001;
	public static const int NM_FIRST = 0x0;
	public static const int NM_CLICK = 0xfffffffe;
	public static const int NM_CUSTOMDRAW = NM_FIRST - 12;
	public static const int NM_DBLCLK = 0xfffffffd;
	public static const int NM_RECOGNIZEGESTURE = NM_FIRST - 16;
	public static const int NM_RETURN = 0xfffffffc;
	public static const int NOTIFYICONDATAA_V2_SIZE = 488;
	public static const int NOTIFYICONDATAW_V2_SIZE = 936;
	public static int NOTIFYICONDATA_V2_SIZE;
	public static const int NOTSRCCOPY = 0x330008;
	public static const int NULLREGION = 0x1;
	public static const int NULL_BRUSH = 0x5;
	public static const int NULL_PEN = 0x8;
	public static const int NUMRESERVED = 106;
	public static const int OBJID_CARET = 0xFFFFFFF8;
	public static const int OBJID_CLIENT = 0xFFFFFFFC;
	public static const int OBJID_MENU = 0xFFFFFFFD;
	public static const int OBJID_WINDOW = 0x00000000;
	public static const int OBJ_FONT = 0x6;
	public static const int OBJ_PEN = 0x1;
	public static const TCHAR* OBM_CHECKBOXES = cast(TCHAR*)0x7ff7;
	public static const int ODS_SELECTED = 0x1;
	public static const int ODT_MENU = 0x1;
	public static const int OFN_ALLOWMULTISELECT = 0x200;
	public static const int OFN_ENABLEHOOK = 0x00000020;
	public static const int OFN_EXPLORER = 0x80000;
	public static const int OFN_HIDEREADONLY = 0x4;
	public static const int OFN_NOCHANGEDIR = 0x8;
	public static const TCHAR* OIC_BANG = cast(TCHAR*)0x7F03;
	public static const TCHAR* OIC_HAND = cast(TCHAR*)0x7F01;
	public static const TCHAR* OIC_INFORMATION = cast(TCHAR*)0x7F04;
	public static const TCHAR* OIC_QUES = cast(TCHAR*)0x7F02;
	public static const TCHAR* OIC_WINLOGO = cast(TCHAR*)0x7F05;
	public static const int OPAQUE = 0x2;
	public static const int PATCOPY = 0xf00021;
	public static const int PATINVERT = 0x5a0049;
	public static const int PBM_GETPOS = 0x408;
	public static const int PBM_GETRANGE = 0x407;
	public static const int PBM_SETBARCOLOR = 0x409;
	public static const int PBM_SETBKCOLOR = 0x2001;
	public static const int PBM_SETPOS = 0x402;
	public static const int PBM_SETRANGE32 = 0x406;
	public static const int PBM_STEPIT = 0x405;
	public static const int PBS_SMOOTH = 0x1;
	public static const int PBS_VERTICAL = 0x4;
	public static const int PD_ALLPAGES = 0x0;
	public static const int PD_COLLATE = 0x10;
	public static const int PD_PAGENUMS = 0x2;
	public static const int PD_PRINTTOFILE = 0x20;
	public static const int PD_RETURNDC = 0x100;
	public static const int PD_SELECTION = 0x1;
	public static const int PD_USEDEVMODECOPIESANDCOLLATE = 0x40000;
	public static const int PD_ENABLESETUPHOOK = 0x00002000;
	public static const int PD_ENABLEPRINTHOOK = 0x00001000;
	public static const int PFM_TABSTOPS = 0x10;
	public static const int PHYSICALHEIGHT = 0x6f;
	public static const int PHYSICALOFFSETX = 0x70;
	public static const int PHYSICALOFFSETY = 0x71;
	public static const int PHYSICALWIDTH = 0x6e;
	public static const int PLANES = 0xe;
	public static const int PM_NOREMOVE = 0x0;
	public static const int PM_NOYIELD = 0x2;
	public static const int QS_HOTKEY = 0x0080;
	public static const int QS_KEY = 0x0001;
	public static const int QS_MOUSEMOVE = 0x0002;
	public static const int QS_MOUSEBUTTON = 0x0004;
	public static const int QS_MOUSE = QS_MOUSEMOVE | QS_MOUSEBUTTON;
	public static const int QS_INPUT = QS_KEY | QS_MOUSE;
	public static const int QS_POSTMESSAGE = 0x0008;
	public static const int QS_TIMER = 0x0010;
	public static const int QS_PAINT = 0x0020;
	public static const int QS_SENDMESSAGE = 0x0040;
	public static const int QS_ALLINPUT = QS_MOUSEMOVE | QS_MOUSEBUTTON | QS_KEY | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_SENDMESSAGE;
	public static const int PM_QS_INPUT = QS_INPUT << 16;
	public static const int PM_QS_POSTMESSAGE = (QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16;
	public static const int PM_QS_PAINT = QS_PAINT << 16;
	public static const int PM_QS_SENDMESSAGE = QS_SENDMESSAGE << 16;
	public static const int PM_REMOVE = 0x1;
	public static const char[] PROGRESS_CLASS = "msctls_progress32";
	public static const int PS_DASH = 0x1;
	public static const int PS_DASHDOT = 0x3;
	public static const int PS_DASHDOTDOT = 0x4;
	public static const int PS_DOT = 0x2;
	public static const int PS_ENDCAP_FLAT = 0x200;
	public static const int PS_GEOMETRIC = 0x10000;
	public static const int PS_JOIN_MITER = 0x2000;
	public static const int PS_SOLID = 0x0;
	public static const int PS_STYLE_MASK = 0xf;
	public static const int R2_COPYPEN = 0xd;
	public static const int R2_XORPEN = 0x7;
	public static const int RASTERCAPS = 0x26;
	public static const int RASTER_FONTTYPE = 0x1;
	public static const int RBBIM_CHILD = 0x10;
	public static const int RBBIM_CHILDSIZE = 0x20;
	public static const int RBBIM_COLORS = 0x2;
	public static const int RBBIM_HEADERSIZE = 0x800;
	public static const int RBBIM_ID = 0x100;
	public static const int RBBIM_IDEALSIZE = 0x200;
	public static const int RBBIM_SIZE = 0x40;
	public static const int RBBIM_STYLE = 0x1;
	public static const int RBBIM_TEXT = 0x4;
	public static const int RBBS_BREAK = 0x1;
	public static const int RBBS_GRIPPERALWAYS = 0x80;
	public static const int RBBS_NOGRIPPER = 0x00000100;
	public static const int RBBS_USECHEVRON = 0x00000200;
	public static const int RBBS_VARIABLEHEIGHT = 0x40;
	public static const int RBN_FIRST = 0xfffffcc1;
	public static const int RBN_CHEVRONPUSHED = RBN_FIRST - 10;
	public static const int RBN_HEIGHTCHANGE = 0xfffffcc1;
	public static const int RBS_DBLCLKTOGGLE = 0x8000;
	public static const int RBS_BANDBORDERS = 0x400;
	public static const int RBS_VARHEIGHT = 0x200;
	public static const int RB_DELETEBAND = 0x402;
	public static const int RB_GETBANDBORDERS = 0x422;
	public static const int RB_GETBANDCOUNT = 0x40c;
	public static int RB_GETBANDINFO;
	public static const int RB_GETBANDMARGINS = 0x428;
	public static const int RB_GETBARHEIGHT = 0x41b;
	public static const int RB_GETBKCOLOR = 0x414;
	public static const int RB_GETRECT = 0x409;
	public static const int RB_GETTEXTCOLOR = 0x416;
	public static const int RB_IDTOINDEX = 0x410;
	public static int RB_INSERTBAND;
	public static const int RB_MOVEBAND = 0x427;
	public static int RB_SETBANDINFO;
	public static const int RB_SETBKCOLOR = 0x413;
	public static const int RB_SETTEXTCOLOR = 0x415;
	public static const int RC_BITBLT = 0x1;
	public static const int RC_PALETTE = 0x100;
	public static const int RDW_ALLCHILDREN = 0x80;
	public static const int RDW_ERASE = 0x4;
	public static const int RDW_FRAME = 0x400;
	public static const int RDW_INVALIDATE = 0x1;
	public static const int RDW_UPDATENOW = 0x100;
	public static const int READ_CONTROL = 0x20000;
	public static const char[] REBARCLASSNAME = "ReBarWindow32";
	public static const int RGN_AND = 0x1;
	public static const int RGN_DIFF = 0x4;
	public static const int RGN_ERROR = 0;
	public static const int RGN_OR = 0x2;
	public static const int SBS_HORZ = 0x0;
	public static const int SBS_VERT = 0x1;
	public static const int SB_BOTTOM = 0x7;
	public static const int SB_CTL = 0x2;
	public static const int SB_ENDSCROLL = 0x8;
	public static const int SB_HORZ = 0x0;
	public static const int SB_LINEDOWN = 0x1;
	public static const int SB_LINEUP = 0x0;
	public static const int SB_PAGEDOWN = 0x3;
	public static const int SB_PAGEUP = 0x2;
	public static const int SB_THUMBPOSITION = 0x4;
	public static const int SB_THUMBTRACK = 0x5;
	public static const int SB_TOP = 0x6;
	public static const int SB_VERT = 0x1;
	public static const int SCF_ALL = 0x4;
	public static const int SCF_DEFAULT = 0x0;
	public static const int SCF_SELECTION = 0x1;
	public static const int SC_CLOSE = 0xf060;
	public static const int SC_HSCROLL = 0xf080;
	public static const int SC_KEYMENU = 0xf100;
	public static const int SC_MAXIMIZE = 0xf030;
	public static const int SC_MINIMIZE = 0xf020;
	public static const int SC_NEXTWINDOW = 0xF040;
	public static const int SC_RESTORE = 0xf120;
	public static const int SC_SIZE = 0xf000;
	public static const int SC_TASKLIST = 0xf130;
	public static const int SC_VSCROLL = 0xf070;
	public static const int SEM_FAILCRITICALERRORS = 0x1;
	public static const int SF_RTF = 0x2;
	public static const int SHCMBF_HIDDEN = 0x2;
	public static const int SHCMBM_OVERRIDEKEY = 0x400 + 403;
	public static const int SHCMBM_SETSUBMENU = 0x590;
	public static const int SHCMBM_GETSUBMENU = 0x591;
	public static const int SHMBOF_NODEFAULT = 0x1;
	public static const int SHMBOF_NOTIFY = 0x2;
	public static const int SHRG_RETURNCMD = 0x1;
	public static const int SIF_ALL = 0x17;
	public static const int SIF_DISABLENOSCROLL = 0x8;
	public static const int SIF_PAGE = 0x2;
	public static const int SIF_POS = 0x4;
	public static const int SIF_RANGE = 0x1;
	public static const int SIF_TRACKPOS = 0x10;
	public static const int SIP_DOWN = 1;
	public static const int SIP_UP = 0;
	public static const int SIPF_ON = 0x1;
	public static const int SIZE_MINIMIZED = 0x1;
	public static const int SIZEPALETTE = 104;
	public static const int SM_CMONITORS = 80;
	public static const int SM_CXBORDER = 0x5;
	public static const int SM_CXCURSOR = 0xd;
	public static const int SM_CXEDGE = 0x2d;
	public static const int SM_CXHSCROLL = 0x15;
	public static const int SM_CXICON = 0x0b;
	public static const int SM_CYICON = 0x0c;
	public static const int SM_CXVIRTUALSCREEN = 78;
	public static const int SM_CYVIRTUALSCREEN = 79;
	public static const int SM_CXSMICON = 49;
	public static const int SM_CYSMICON = 50;
	public static const int SM_CXSCREEN = 0x0;
	public static const int SM_XVIRTUALSCREEN = 76;
	public static const int SM_YVIRTUALSCREEN = 77;
	public static const int SM_CXVSCROLL = 0x2;
	public static const int SM_CYBORDER = 0x6;
	public static const int SM_CYCURSOR = 0xe;
	public static const int SM_CYHSCROLL = 0x3;
	public static const int SM_CYMENU = 0xf;
	public static const int SM_CXMINTRACK = 34;
	public static const int SM_CYMINTRACK = 35;
	public static const int SM_CYSCREEN = 0x1;
	public static const int SM_CYVSCROLL = 0x14;
	public static const int SPI_GETHIGHCONTRAST = 66;
	public static const int SPI_GETWORKAREA = 0x30;
	public static const int SPI_GETNONCLIENTMETRICS = 41;
	public static const int SPI_GETWHEELSCROLLLINES = 104;
	public static const int SPI_SETSIPINFO = 224;
	public static const int SRCAND = 0x8800c6;
	public static const int SRCCOPY = 0xcc0020;
	public static const int SRCINVERT = 0x660046;
	public static const int SRCPAINT = 0xee0086;
	public static const int SS_BITMAP = 0xe;
	public static const int SS_CENTER = 0x1;
	public static const int SS_CENTERIMAGE = 0x200;
	public static const int SS_ICON = 0x3;
	public static const int SS_LEFT = 0x0;
	public static const int SS_LEFTNOWORDWRAP = 0xc;
	public static const int SS_NOTIFY = 0x100;
	public static const int SS_OWNERDRAW = 0xd;
	public static const int SS_REALSIZEIMAGE = 0x800;
	public static const int SS_RIGHT = 0x2;
	public static const int STANDARD_RIGHTS_READ = 0x20000;
	public static const int STD_COPY = 0x1;
	public static const int STD_CUT = 0x0;
	public static const int STD_FILENEW = 0x6;
	public static const int STD_FILEOPEN = 0x7;
	public static const int STD_FILESAVE = 0x8;
	public static const int STD_PASTE = 0x2;
	public static const int STM_SETIMAGE = 0x172;
	public static const int SWP_DRAWFRAME = 0x20;
	public static const int SWP_NOACTIVATE = 0x10;
	public static const int SWP_NOCOPYBITS = 0x100;
	public static const int SWP_NOMOVE = 0x2;
	public static const int SWP_NOREDRAW = 0x8;
	public static const int SWP_NOSIZE = 0x1;
	public static const int SWP_NOZORDER = 0x4;
	public static const int SW_ERASE = 0x4;
	public static const int SW_HIDE = 0x0;
	public static const int SW_INVALIDATE = 0x2;
	public static const int SW_MINIMIZE = 0x6;
	public static const int SW_PARENTOPENING = 0x3;
	public static int SW_RESTORE;
	public static const int SW_SCROLLCHILDREN = 0x1;
	public static const int SW_SHOW = 0x5;
	public static int SW_SHOWMAXIMIZED;
	public static const int SW_SHOWMINIMIZED = 0x2;
	public static const int SW_SHOWMINNOACTIVE = 0x7;
	public static const int SW_SHOWNA = 0x8;
	public static const int SW_SHOWNOACTIVATE = 0x4;
	public static const int SYNCHRONIZE = 0x100000;
	public static const int SYSRGN = 0x4;
	public static const int SYSTEM_FONT = 0xd;
	public static const int S_OK = 0x0;
	public static const int TBIF_COMMAND = 0x20;
	public static const int TBIF_STATE = 0x4;
	public static const int TBIF_IMAGE = 0x1;
	public static const int TBIF_LPARAM = 0x10;
	public static const int TBIF_SIZE = 0x40;
	public static const int TBIF_STYLE = 0x8;
	public static const int TBIF_TEXT = 0x2;
	public static const int TBM_GETLINESIZE = 0x418;
	public static const int TBM_GETPAGESIZE = 0x416;
	public static const int TBM_GETPOS = 0x400;
	public static const int TBM_GETRANGEMAX = 0x402;
	public static const int TBM_GETRANGEMIN = 0x401;
	public static const int TBM_GETTHUMBRECT = 0x419;
	public static const int TBM_SETLINESIZE = 0x417;
	public static const int TBM_SETPAGESIZE = 0x415;
	public static const int TBM_SETPOS = 0x405;
	public static const int TBM_SETRANGEMAX = 0x408;
	public static const int TBM_SETRANGEMIN = 0x407;
	public static const int TBM_SETTICFREQ = 0x414;
	public static const int TBN_DROPDOWN = 0xfffffd3a;
	public static const int TBN_FIRST = 0xfffffd44;
	public static const int TBSTATE_CHECKED = 0x1;
	public static const int TBSTYLE_CUSTOMERASE = 0x2000;
	public static const int TBSTYLE_DROPDOWN = 0x8;
	public static const int TBSTATE_ENABLED = 0x4;
	public static const int TBSTYLE_AUTOSIZE = 0x10;
	public static const int TBSTYLE_EX_DRAWDDARROWS = 0x1;
	public static const int TBSTYLE_EX_MIXEDBUTTONS = 0x8;
	public static const int TBSTYLE_FLAT = 0x800;
	public static const int TBSTYLE_LIST = 0x1000;
	public static const int TBSTYLE_TOOLTIPS = 0x100;
	public static const int TBSTYLE_TRANSPARENT = 0x8000;
	public static const int TBSTYLE_WRAPABLE = 0x200;
	public static const int TBS_AUTOTICKS = 0x1;
	public static const int TBS_BOTH = 0x8;
	public static const int TBS_HORZ = 0x0;
	public static const int TBS_VERT = 0x2;
	public static int TB_ADDSTRING;
	public static const int TB_BUTTONCOUNT = 0x418;
	public static const int TB_BUTTONSTRUCTSIZE = 0x41e;
	public static const int TB_COMMANDTOINDEX = 0x419;
	public static const int TB_DELETEBUTTON = 0x416;
	public static const int TB_ENDTRACK = 0x8;
	public static const int TB_GETBUTTON = 0x417;
	public static int TB_GETBUTTONINFO;
	public static const int TB_GETBUTTONSIZE = 0x43a;
	public static int TB_GETBUTTONTEXT;
	public static const int TB_GETDISABLEDIMAGELIST = 0x437;
	public static const int TB_GETHOTIMAGELIST = 0x435;
	public static const int TB_GETHOTITEM = 0x0400 + 71;
	public static const int TB_GETIMAGELIST = 0x431;
	public static const int TB_GETITEMRECT = 0x41d;
	public static const int TB_GETROWS = 0x428;
	public static const int TB_GETSTATE = 0x412;
	public static const int TB_GETTOOLTIPS = 0x423;
	public static int TB_INSERTBUTTON;
	public static const int TB_LOADIMAGES = 0x432;
	public static int TB_MAPACCELERATOR;
	public static const int TB_SETBITMAPSIZE = 0x420;
	public static int TB_SETBUTTONINFO;
	public static const int TB_SETBUTTONSIZE = 0x41f;
	public static const int TB_SETDISABLEDIMAGELIST = 0x436;
	public static const int TB_SETEXTENDEDSTYLE = 0x454;
	public static const int TB_SETHOTIMAGELIST = 0x434;
	public static const int TB_SETHOTITEM =  0x0400 + 72;
	public static const int TB_SETIMAGELIST = 0x430;
	public static const int TB_SETPARENT = 0x400 + 37;
	public static const int TB_SETROWS = 0x427;
	public static const int TB_SETSTATE = 0x411;
	public static const int TCIF_IMAGE = 0x2;
	public static const int TCIF_TEXT = 0x1;
	public static const int TCI_SRCCHARSET = 0x1;
	public static const int TCI_SRCCODEPAGE = 0x2;
	public static const int TCM_ADJUSTRECT = 0x1328;
	public static const int TCM_DELETEITEM = 0x1308;
	public static const int TCM_GETCURSEL = 0x130b;
	public static const int TCM_GETITEMCOUNT = 0x1304;
	public static const int TCM_GETITEMRECT = 0x130a;
	public static const int TCM_GETTOOLTIPS = 0x132d;
	public static int TCM_INSERTITEM;
	public static const int TCM_SETCURSEL = 0x130c;
	public static const int TCM_SETIMAGELIST = 0x1303;
	public static int TCM_SETITEM;
	public static const int TCN_SELCHANGE = 0xfffffdd9;
	public static const int TCN_SELCHANGING = 0xfffffdd8;
	public static const int TCS_BOTTOM = 0x0002;
	public static const int TCS_FOCUSNEVER = 0x8000;
	public static const int TCS_MULTILINE = 0x200;
	public static const int TCS_TABS = 0x0;
	public static const int TCS_TOOLTIPS = 0x4000;
	public static const int TECHNOLOGY = 0x2;
	public static const int TME_HOVER = 0x1;
	public static const int TME_LEAVE = 0x2;
	public static const int TME_QUERY = 0x40000000;
	public static const int TMPF_VECTOR = 0x2;
	public static const char[] TOOLBARCLASSNAME = "ToolbarWindow32";
	public static const char[] TOOLTIPS_CLASS = "tooltips_class32";
	public static const int TPM_LEFTALIGN = 0x0;
	public static const int TPM_LEFTBUTTON = 0x0;
	public static const int TPM_RIGHTBUTTON = 0x2;
	public static const int TPM_RIGHTALIGN = 0x8;
	public static const char[] TRACKBAR_CLASS = "msctls_trackbar32";
	public static const int TRANSPARENT = 0x1;
	public static const int TTF_IDISHWND = 0x1;
	public static const int TTF_SUBCLASS = 0x10;
	public static const int TTF_RTLREADING = 0x4;
	public static int TTM_ADDTOOL;
	public static int TTM_DELTOOL;
	public static const int TTM_SETMAXTIPWIDTH = 0x418;
	public static const int TTM_UPDATE = 0x41D;
	public static const int TTN_FIRST = 0xfffffdf8;
	public static int TTN_GETDISPINFO;
	public static const int TTN_GETDISPINFOW = 0xfffffdee;
	public static const int TTN_GETDISPINFOA = 0xfffffdf8;
	public static const int TTN_POP = TTN_FIRST - 2;
	public static const int TTN_SHOW = TTN_FIRST - 1;
	public static const int TTS_ALWAYSTIP = 0x1;
	public static const int TV_FIRST = 0x1100;
	public static const int TVE_COLLAPSE = 0x1;
	public static const int TVE_EXPAND = 0x2;
	public static const int TVGN_CARET = 0x9;
	public static const int TVGN_CHILD = 0x4;
	public static const int TVGN_DROPHILITED = 0x8;
	public static const int TVGN_FIRSTVISIBLE = 0x5;
	public static const int TVGN_LASTVISIBLE = 0xa;
	public static const int TVGN_NEXT = 0x1;
	public static const int TVGN_NEXTVISIBLE = 0x6;
	public static const int TVGN_PARENT = 0x3;
	public static const int TVGN_PREVIOUSVISIBLE = 0x7;
	public static const int TVGN_ROOT = 0x0;
	public static const int TVHT_ONITEM = 0x46;
	public static const int TVHT_ONITEMICON = 0x2;
	public static const int TVHT_ONITEMLABEL = 0x4;
	public static const int TVHT_ONITEMSTATEICON = 0x40;
	public static const int TVIF_HANDLE = 0x10;
	public static const int TVIF_IMAGE = 0x2;
	public static const int TVIF_PARAM = 0x4;
	public static const int TVIF_SELECTEDIMAGE = 0x20;
	public static const int TVIF_STATE = 0x8;
	public static const int TVIF_TEXT = 0x1;
	public static const int TVIS_EXPANDED = 0x20;
	public static const int TVIS_SELECTED = 0x2;
	public static const int TVIS_STATEIMAGEMASK = 0xf000;
	public static const HTREEITEM TVI_FIRST = cast(HTREEITEM)0xffff0001;
	public static const HTREEITEM TVI_LAST = cast(HTREEITEM)0xffff0002;
	public static const HTREEITEM TVI_ROOT = cast(HTREEITEM)0xffff0000;
	public static const int TVM_DELETEITEM = 0x1101;
	public static const int TVM_ENSUREVISIBLE = 0x1114;
	public static const int TVM_EXPAND = 0x1102;
	public static const int TVM_GETBKCOLOR = 0x111f;
	public static const int TVM_GETCOUNT = 0x1105;
	public static const int TVM_GETIMAGELIST = 0x1108;
	public static int TVM_GETITEM;
	public static const int TVM_GETITEMHEIGHT = 0x111c;
	public static const int TVM_GETITEMRECT = 0x1104;
	public static const int TVM_GETNEXTITEM = 0x110a;
	public static const int TVM_GETTEXTCOLOR = 0x1120;
	public static const int TVM_GETTOOLTIPS = TV_FIRST + 25;
	public static const int TVM_GETVISIBLECOUNT = TV_FIRST + 16;
	public static const int TVM_HITTEST = 0x1111;
	public static int TVM_INSERTITEM;
	public static const int TVM_MAPACCIDTOHTREEITEM = TV_FIRST + 42;
	public static const int TVM_MAPHTREEITEMTOACCID = TV_FIRST + 43;
	public static const int TVM_SELECTITEM = 0x110b;
	public static const int TVM_SETBKCOLOR = 0x111d;
	public static const int TVM_SETIMAGELIST = 0x1109;
	public static const int TVM_SETINSERTMARK = 0x111a;
	public static int TVM_SETITEM;
	public static const int TVM_SETTEXTCOLOR = 0x111e;
	public static int TVN_BEGINDRAG;
	public static const int TVN_BEGINDRAGW = 0xfffffe38;
	public static const int TVN_BEGINDRAGA = 0xfffffe69;
	public static int TVN_BEGINRDRAG;
	public static const int TVN_BEGINRDRAGW = 0xfffffe37;
	public static const int TVN_BEGINRDRAGA = 0xfffffe68;
	public static const int TVN_FIRST = 0xfffffe70;
	public static int TVN_ITEMEXPANDING;
	public static const int TVN_ITEMEXPANDINGW = 0xfffffe3a;
	public static const int TVN_ITEMEXPANDINGA = 0xfffffe6b;
	public static int TVN_SELCHANGED;
	public static const int TVN_SELCHANGEDW = 0xfffffe3d;
	public static const int TVN_SELCHANGEDA = 0xfffffe6e;
	public static int TVN_SELCHANGING;
	public static const int TVN_SELCHANGINGW = 0xfffffe3e;
	public static const int TVN_SELCHANGINGA = 0xfffffe6f;
	public static const int TVSIL_NORMAL = 0x0;
	public static const int TVSIL_STATE = 0x2;
	public static const int TVS_DISABLEDRAGDROP = 0x10;
	public static const int TVS_FULLROWSELECT = 0x1000;
	public static const int TVS_HASBUTTONS = 0x1;
	public static const int TVS_HASLINES = 0x2;
	public static const int TVS_LINESATROOT = 0x4;
	public static const int TVS_NOTOOLTIPS = 0x80;
	public static const int TVS_SHOWSELALWAYS = 0x20;
	public static const int UIS_INITIALIZE = 3;
	public static const int USP_E_SCRIPT_NOT_IN_FONT = 0x80040200;
	public static const int VERTRES = 0xa;
	public static const int VK_BACK = 0x8;
	public static const int VK_CANCEL = 0x3;
	public static const int VK_CAPITAL = 0x14;
	public static const int VK_CONTROL = 0x11;
	public static const int VK_DECIMAL = 0x6E;
	public static const int VK_DELETE = 0x2e;
	public static const int VK_DIVIDE = 0x6f;
	public static const int VK_DOWN = 0x28;
	public static const int VK_END = 0x23;
	public static const int VK_ESCAPE = 0x1b;
	public static const int VK_F1 = 0x70;
	public static const int VK_F10 = 0x79;
	public static const int VK_F11 = 0x7a;
	public static const int VK_F12 = 0x7b;
	public static const int VK_F13 = 0x7c;
	public static const int VK_F14 = 0x7d;
	public static const int VK_F15 = 0x7e;
	public static const int VK_F2 = 0x71;
	public static const int VK_F3 = 0x72;
	public static const int VK_F4 = 0x73;
	public static const int VK_F5 = 0x74;
	public static const int VK_F6 = 0x75;
	public static const int VK_F7 = 0x76;
	public static const int VK_F8 = 0x77;
	public static const int VK_F9 = 0x78;
	public static const int VK_HOME = 0x24;
	public static const int VK_INSERT = 0x2d;
	public static const int VK_LBUTTON = 0x1;
	public static const int VK_LEFT = 0x25;
	public static const int VK_MBUTTON = 0x4;
	public static const int VK_MENU = 0x12;
	public static const int VK_MULTIPLY = 0x6A;
	public static const int VK_NEXT = 0x22;
	public static const int VK_NUMLOCK = 0x90;
	public static const int VK_NUMPAD0 = 0x60;
	public static const int VK_NUMPAD1 = 0x61;
	public static const int VK_NUMPAD2 = 0x62;
	public static const int VK_NUMPAD3 = 0x63;
	public static const int VK_NUMPAD4 = 0x64;
	public static const int VK_NUMPAD5 = 0x65;
	public static const int VK_NUMPAD6 = 0x66;
	public static const int VK_NUMPAD7 = 0x67;
	public static const int VK_NUMPAD8 = 0x68;
	public static const int VK_NUMPAD9 = 0x69;
	public static const int VK_PAUSE = 0x13;
	public static const int VK_PRIOR = 0x21;
	public static const int VK_RBUTTON = 0x2;
	public static const int VK_RETURN = 0xd;
	public static const int VK_RIGHT = 0x27;
	public static const int VK_SCROLL = 0x91;
	public static const int VK_SEPARATOR = 0x6C;
	public static const int VK_SHIFT = 0x10;
	public static const int VK_SNAPSHOT = 0x2C;
	public static const int VK_SPACE = 0x20;
	public static const int VK_SUBTRACT = 0x6D;
	public static const int VK_TAB = 0x9;
	public static const int VK_UP = 0x26;
	public static const int VK_ADD = 0x6B;
	public static const int VK_APP1 = 0xc1;
	public static const int VK_APP2 = 0xc2;
	public static const int VK_APP3 = 0xc3;
	public static const int VK_APP4 = 0xc4;
	public static const int VK_APP5 = 0xc5;
	public static const int VK_APP6 = 0xc6;
	public static const char[] WC_LINK = "SysLink"; 
	public static const char[] WC_LISTVIEW = "SysListView32"; 
	public static const char[] WC_TABCONTROL = "SysTabControl32"; 
	public static const char[] WC_TREEVIEW = "SysTreeView32";
	public static const int WH_GETMESSAGE = 0x3;
	public static const int WH_MSGFILTER = 0xFFFFFFFF;
	public static const int WHEEL_DELTA = 120;
	public static const int WHEEL_PAGESCROLL = 0xFFFFFFFF;
	public static const int WM_ACTIVATE = 0x6;
	public static const int WM_ACTIVATEAPP = 0x1c;
	public static const int WM_APP = 0x8000;
	public static const int WM_CANCELMODE = 0x1f;
	public static const int WM_CHANGEUISTATE = 0x0127;
	public static const int WM_CHAR = 0x102;
	public static const int WM_CLEAR = 0x303;
	public static const int WM_CLOSE = 0x10;
	public static const int WM_COMMAND = 0x111;
	public static const int WM_CONTEXTMENU = 0x7b;
	public static const int WM_COPY = 0x301;
	public static const int WM_CREATE = 0x0001;	
	public static const int WM_CTLCOLORBTN = 0x135;
	public static const int WM_CTLCOLORDLG = 0x136;
	public static const int WM_CTLCOLOREDIT = 0x133;
	public static const int WM_CTLCOLORLISTBOX = 0x134;
	public static const int WM_CTLCOLORMSGBOX = 0x132;
	public static const int WM_CTLCOLORSCROLLBAR = 0x137;
	public static const int WM_CTLCOLORSTATIC = 0x138;
	public static const int WM_CUT = 0x300;
	public static const int WM_DEADCHAR = 0x103;
	public static const int WM_DESTROY = 0x2;
	public static const int WM_DRAWITEM = 0x2b;
	public static const int WM_ENDSESSION = 0x16;
	public static const int WM_ENTERIDLE = 0x121;
	public static const int WM_ERASEBKGND = 0x14;
	public static const int WM_GETDLGCODE = 0x87;
	public static const int WM_GETFONT = 0x31;
//	public static final int WM_GETICON = 0x7f;
	public static const int WM_GETOBJECT = 0x003D;
	public static const int WM_HELP = 0x53;
	public static const int WM_HOTKEY = 0x0312;
	public static const int WM_HSCROLL = 0x114;
	public static const int WM_IME_CHAR = 0x286;
	public static const int WM_IME_COMPOSITION = 0x10f;
	public static const int WM_INITDIALOG = 0x110;
	public static const int WM_INITMENUPOPUP = 0x117;
	public static const int WM_KEYDOWN = 0x100;
	public static const int WM_KEYFIRST = 0x100;
	public static const int WM_KEYLAST = 0x108;
	public static const int WM_KEYUP = 0x101;
	public static const int WM_KILLFOCUS = 0x8;
	public static const int WM_LBUTTONDBLCLK = 0x203;
	public static const int WM_LBUTTONDOWN = 0x201;
	public static const int WM_LBUTTONUP = 0x202;
	public static const int WM_MBUTTONDBLCLK = 0x209;
	public static const int WM_MBUTTONDOWN = 0x207;
	public static const int WM_MBUTTONUP = 0x208;
	public static const int WM_MEASUREITEM = 0x2c;
	public static const int WM_MENUCHAR = 0x120;
	public static const int WM_MENUSELECT = 0x11f;
	public static const int WM_MOUSEACTIVATE = 0x21;
	public static const int WM_MOUSEFIRST = 0x200;
	public static const int WM_MOUSEHOVER = 0x2a1;
	public static const int WM_MOUSELEAVE = 0x2a3;
	public static const int WM_MOUSEMOVE = 0x200;
	public static const int WM_MOUSEWHEEL = 0x20a;
	public static const int WM_MOUSELAST = 0x20d;
	public static const int WM_MOVE = 0x3;
	public static const int WM_NCACTIVATE = 0x86;
	public static const int WM_NCCALCSIZE = 0x83;
	public static const int WM_NCDESTROY = 0x82;
	public static const int WM_NCHITTEST = 0x84;
	public static const int WM_NCLBUTTONDOWN = 0x00A1;
	public static const int WM_NOTIFY = 0x4e;
	public static const int WM_NULL = 0x0;
	public static const int WM_PAINT = 0xf;
	public static const int WM_PALETTECHANGED = 0x311;
	public static const int WM_PARENTNOTIFY = 0x0210;
	public static const int WM_PASTE = 0x302;
	public static const int WM_PRINTCLIENT = 0x0318;
	public static const int WM_QUERYENDSESSION = 0x11;
	public static const int WM_QUERYNEWPALETTE = 0x30f;
	public static const int WM_QUERYOPEN = 0x13;
	public static const int WM_RBUTTONDBLCLK = 0x206;
	public static const int WM_RBUTTONDOWN = 0x204;
	public static const int WM_RBUTTONUP = 0x205;
	public static const int WM_SETCURSOR = 0x20;
	public static const int WM_SETFOCUS = 0x7;
	public static const int WM_SETFONT = 0x30;
	public static const int WM_SETICON = 0x80;
	public static const int WM_SETREDRAW = 0xb;
	public static const int WM_SETTINGCHANGE = 0x1A;
	public static const int WM_SHOWWINDOW = 0x18;
	public static const int WM_SIZE = 0x5;
	public static const int WM_SYSCHAR = 0x106;
	public static const int WM_SYSCOLORCHANGE = 0x15;
	public static const int WM_SYSCOMMAND = 0x112;
	public static const int WM_SYSKEYDOWN = 0x104;
	public static const int WM_SYSKEYUP = 0x105;
	public static const int WM_TIMER = 0x113;
	public static const int WM_UNDO = 0x304;
	public static const int WM_USER = 0x400;
	public static const int WM_VSCROLL = 0x115;
	public static const int WM_WINDOWPOSCHANGED = 0x47;
	public static const int WM_WINDOWPOSCHANGING = 0x46;
	public static const int WS_BORDER = 0x800000;
	public static const int WS_CAPTION = 0xc00000;
	public static const int WS_CHILD = 0x40000000;
	public static const int WS_MINIMIZE = 0x20000000;
	public static const int WS_CLIPCHILDREN = 0x2000000;
	public static const int WS_CLIPSIBLINGS = 0x4000000;
	public static const int WS_EX_CAPTIONOKBTN = 0x80000000;
	public static const int WS_EX_CLIENTEDGE = 0x200;
	public static const int WS_EX_DLGMODALFRAME = 0x1;
	public static const int WS_EX_LAYOUTRTL = 0x00400000;
	public static const int WS_EX_LEFTSCROLLBAR = 0x00004000;
	public static const int WS_EX_MDICHILD = 0x00000040;
	public static const int WS_EX_NOINHERITLAYOUT = 0x00100000;
	public static const int WS_EX_RIGHT = 0x00001000;
	public static const int WS_EX_RTLREADING = 0x00002000;
	public static const int WS_EX_STATICEDGE = 0x20000;
	public static const int WS_EX_TOOLWINDOW = 0x80;
	public static const int WS_EX_TOPMOST = 0x8;
	public static const int WS_EX_TRANSPARENT = 0x20;
	public static const int WS_HSCROLL = 0x100000;
	public static int WS_MAXIMIZEBOX;
	public static int WS_MINIMIZEBOX;
	public static int WS_OVERLAPPED;
	public static const int WS_OVERLAPPEDWINDOW = 0xcf0000;
	public static const int WS_POPUP = 0x80000000;
	public static const int WS_SYSMENU = 0x80000;
	public static const int WS_TABSTOP = 0x10000;
	public static const int WS_THICKFRAME = 0x40000;
	public static const int WS_VISIBLE = 0x10000000;
	public static const int WS_VSCROLL = 0x200000;
	
/** Ansi/Unicode wrappers */
// Unicode/Ansi alias
version(ANSI) {
	alias WINAPI.CallWindowProcA CallWindowProc;
	alias WINAPI.CharLowerA CharLower;
	alias WINAPI.CharUpperA CharUpper;
	alias WINAPI.ChooseColorA ChooseColor;
	alias WINAPI.ChooseFontA ChooseFont;
	alias WINAPI.CreateAcceleratorTableA CreateAcceleratorTable;
	alias WINAPI.CreateDCA CreateDC;
	alias WINAPI.CreateEventA CreateEvent;
	alias WINAPI.CreateFileA CreateFile;
	alias WINAPI.CreateFontIndirectA CreateFontIndirect;
	alias WINAPI.CreateWindowExA CreateWindowEx;
	alias WINAPI.DefFrameProcA DefFrameProc;
	alias WINAPI.DefMDIChildProcA DefMDIChildProc;
	alias WINAPI.DefWindowProcA DefWindowProc;
	alias WINAPI.DeleteFileA DeleteFile;
	alias WINAPI.DispatchMessageA DispatchMessage;
	alias WINAPI.DragQueryFileA DragQueryFile;
	alias WINAPI.DrawStateA DrawState;
	alias WINAPI.DrawTextA DrawText;
	alias WINAPI.EnumFontFamiliesExA EnumFontFamiliesEx;
	alias WINAPI.EnumFontFamiliesA EnumFontFamilies;
	alias WINAPI.EnumSystemLanguageGroupsA EnumSystemLanguageGroups;
	alias WINAPI.EnumSystemLocalesA EnumSystemLocales;
	alias WINAPI.ExpandEnvironmentStringsA ExpandEnvironmentStrings;
	alias WINAPI.ExtTextOutA ExtTextOut;
	alias WINAPI.ExtractIconExA ExtractIconEx;
	alias WINAPI.FindResourceA FindResource;
	alias WINAPI.FindWindowA FindWindow;
	alias WINAPI.FormatMessageA FormatMessage;
	alias WINAPI.GetCharABCWidthsA GetCharABCWidths;
	alias WINAPI.GetCharWidthA GetCharWidth;
	alias WINAPI.GetCharacterPlacementA GetCharacterPlacement;
	alias WINAPI.GetClassInfoA GetClassInfo;
	alias WINAPI.GetClipboardFormatNameA GetClipboardFormatName;
	alias WINAPI.GetKeyNameTextA GetKeyNameText;
	alias WINAPI.GetLocaleInfoA GetLocaleInfo;
	alias WINAPI.GetMenuItemInfoA GetMenuItemInfo;
	alias WINAPI.GetMessageA GetMessage;
	alias WINAPI.GetModuleFileNameA GetModuleFileName;
	alias WINAPI.GetModuleHandleA GetModuleHandle;
	alias WINAPI.GetMonitorInfoA GetMonitorInfo;
	alias WINAPI.GetObjectA GetObject;
	alias WINAPI.GetOpenFileNameA GetOpenFileName;
	alias WINAPI.GetProfileStringA _GetProfileString;
	alias WINAPI.GetSaveFileNameA GetSaveFileName;
	alias WINAPI.GetTextExtentPoint32A GetTextExtentPoint32;
	alias WINAPI.GetTextMetricsA GetTextMetrics;
	alias WINAPI.GetVersionExA GetVersionEx;
	alias WINAPI.GetWindowLongA GetWindowLong;
	alias WINAPI.GetWindowTextA _GetWindowText;
	alias WINAPI.GetWindowTextLengthA GetWindowTextLength;
	alias WINAPI.ImmGetCompositionFontA ImmGetCompositionFont;
	alias WINAPI.ImmGetCompositionStringA ImmGetCompositionString;
	alias WINAPI.ImmSetCompositionFontA ImmSetCompositionFont;
	alias WINAPI.InsertMenuA InsertMenu;
	alias WINAPI.InsertMenuItemA InsertMenuItem;
	alias WINAPI.LoadBitmapA LoadBitmap;
	alias WINAPI.LoadCursorA LoadCursor;
	alias WINAPI.LoadIconA LoadIcon;
	alias WINAPI.LoadImageA LoadImage;
	alias WINAPI.LoadLibraryA LoadLibrary;
	alias WINAPI.LoadStringA LoadString;
	alias WINAPI.MapVirtualKeyA MapVirtualKey;
	alias WINAPI.MessageBoxA MessageBox;
	alias WINAPI.OutputDebugStringA OutputDebugString;
	alias WINAPI.PeekMessageA PeekMessage;
	alias WINAPI.PostMessageA PostMessage;
	alias WINAPI.PostThreadMessageA PostThreadMessage;
	alias WINAPI.PrintDlgA PrintDlg;
	alias WINAPI.RegEnumKeyExA RegEnumKeyEx;
	alias WINAPI.RegOpenKeyExA RegOpenKeyEx;
	alias WINAPI.RegQueryInfoKeyA RegQueryInfoKey;
	alias WINAPI.RegQueryValueExA RegQueryValueEx;
	alias WINAPI.RegisterClassA RegisterClass;
	alias WINAPI.RegisterClipboardFormatA RegisterClipboardFormat;
	alias WINAPI.RegisterWindowMessageA RegisterWindowMessage;
	alias WINAPI.SHBrowseForFolderA SHBrowseForFolder;
	alias WINAPI.SHGetPathFromIDListA SHGetPathFromIDList;
	alias WINAPI.SendMessageA SendMessage;
	alias WINAPI.SetMenuItemInfoA SetMenuItemInfo;
	alias WINAPI.SetWindowLongA SetWindowLong;
	alias WINAPI.SetWindowTextA SetWindowText;
	alias WINAPI.SetWindowsHookExA SetWindowsHookEx;
	alias WINAPI.ShellExecuteExA ShellExecuteEx;
	alias WINAPI.Shell_NotifyIconA Shell_NotifyIcon;
	alias WINAPI.StartDocA StartDoc;
	alias WINAPI.SystemParametersInfoA SystemParametersInfo;
	alias WINAPI.TranslateAcceleratorA TranslateAccelerator;
	alias WINAPI.UnregisterClassA UnregisterClass;
	alias WINAPI.VkKeyScanA VkKeyScan;
}else{
	alias WINAPI.CallWindowProcW CallWindowProc;
	alias WINAPI.CharLowerW CharLower;
	alias WINAPI.CharUpperW CharUpper;
	alias WINAPI.ChooseColorW ChooseColor;
	alias WINAPI.ChooseFontW ChooseFont;
	alias WINAPI.CreateAcceleratorTableW CreateAcceleratorTable;
	alias WINAPI.CreateDCW CreateDC;
	alias WINAPI.CreateEventW CreateEvent;
	alias WINAPI.CreateFileW CreateFile;
	alias WINAPI.CreateFontIndirectW CreateFontIndirect;
	alias WINAPI.CreateWindowExW CreateWindowEx;
	alias WINAPI.DefFrameProcW DefFrameProc;
	alias WINAPI.DefMDIChildProcW DefMDIChildProc;
	alias WINAPI.DefWindowProcW DefWindowProc;
	alias WINAPI.DeleteFileW DeleteFile;
	alias WINAPI.DispatchMessageW DispatchMessage;
	alias WINAPI.DragQueryFileW DragQueryFile;
	alias WINAPI.DrawStateW DrawState;
	alias WINAPI.DrawTextW DrawText;
	alias WINAPI.EnumFontFamiliesExW EnumFontFamiliesEx;
	alias DWINAPI.EnumFontFamiliesW EnumFontFamilies;
	alias DWINAPI.EnumSystemLanguageGroupsW EnumSystemLanguageGroups;
	alias WINAPI.EnumSystemLocalesW EnumSystemLocales;
	alias WINAPI.ExpandEnvironmentStringsW ExpandEnvironmentStrings;
	alias WINAPI.ExtTextOutW ExtTextOut;
	alias DWINAPI.ExtractIconExW ExtractIconEx;
	alias WINAPI.FindResourceW FindResource;
	alias WINAPI.FindWindowW FindWindow;
	alias WINAPI.FormatMessageW FormatMessage;
	alias WINAPI.GetCharABCWidthsW GetCharABCWidths;
	alias WINAPI.GetCharWidthW GetCharWidth;
	alias WINAPI.GetCharacterPlacementW GetCharacterPlacement;
	alias WINAPI.GetClassInfoW GetClassInfo;
	alias WINAPI.GetClipboardFormatNameW GetClipboardFormatName;
	alias WINAPI.GetKeyNameTextW GetKeyNameText;
	alias WINAPI.GetLocaleInfoW GetLocaleInfo;
	alias WINAPI.GetMenuItemInfoW GetMenuItemInfo;
	alias WINAPI.GetMessageW GetMessage;
	alias WINAPI.GetModuleFileNameW GetModuleFileName;
	alias WINAPI.GetModuleHandleW GetModuleHandle;
	alias DWINAPI.GetMonitorInfoW GetMonitorInfo;
	alias WINAPI.GetObjectW GetObject;
	alias WINAPI.GetOpenFileNameW GetOpenFileName;
	alias WINAPI.GetProfileStringW _GetProfileString;
	alias WINAPI.GetSaveFileNameW GetSaveFileName;
	alias WINAPI.GetTextExtentPoint32W GetTextExtentPoint32;
	alias WINAPI.GetTextMetricsW GetTextMetrics;
	alias WINAPI.GetVersionExW GetVersionEx;
	alias WINAPI.GetWindowLongW GetWindowLong;
	alias WINAPI.GetWindowTextW _GetWindowText;
	alias WINAPI.GetWindowTextLengthW GetWindowTextLength;
	alias DWINAPI.ImmGetCompositionFontW ImmGetCompositionFont;
	alias DWINAPI.ImmGetCompositionStringW ImmGetCompositionString;
	alias DWINAPI.ImmSetCompositionFontW ImmSetCompositionFont;
	alias WINAPI.InsertMenuW InsertMenu;
	alias WINAPI.InsertMenuItemW InsertMenuItem;
	alias WINAPI.LoadBitmapW LoadBitmap;
	alias WINAPI.LoadCursorW LoadCursor;
	alias WINAPI.LoadIconW LoadIcon;
	alias WINAPI.LoadImageW LoadImage;
	alias WINAPI.LoadLibraryW LoadLibrary;
	alias WINAPI.LoadStringW LoadString;
	alias WINAPI.MapVirtualKeyW MapVirtualKey;
	alias WINAPI.MessageBoxW MessageBox;
	alias WINAPI.OutputDebugStringW OutputDebugString;
	alias WINAPI.PeekMessageW PeekMessage;
	alias WINAPI.PostMessageW PostMessage;
	alias WINAPI.PostThreadMessageW PostThreadMessage;
	alias WINAPI.PrintDlgW PrintDlg;
	alias WINAPI.RegEnumKeyExW RegEnumKeyEx;
	alias WINAPI.RegOpenKeyExW RegOpenKeyEx;
	alias WINAPI.RegQueryInfoKeyW RegQueryInfoKey;
	alias WINAPI.RegQueryValueExW RegQueryValueEx;
	alias WINAPI.RegisterClassW RegisterClass;
	alias WINAPI.RegisterClipboardFormatW RegisterClipboardFormat;
	alias WINAPI.RegisterWindowMessageW RegisterWindowMessage;
	alias DWINAPI.SHBrowseForFolderW SHBrowseForFolder;
	alias DWINAPI.SHGetPathFromIDListW SHGetPathFromIDList;
	alias WINAPI.SendMessageW SendMessage;
	alias WINAPI.SetMenuItemInfoW SetMenuItemInfo;
	alias WINAPI.SetWindowLongW SetWindowLong;
	alias WINAPI.SetWindowTextW SetWindowText;
	alias WINAPI.SetWindowsHookExW SetWindowsHookEx;
	alias DWINAPI.ShellExecuteExW ShellExecuteEx;
	alias DWINAPI.Shell_NotifyIconW Shell_NotifyIcon;
	alias WINAPI.StartDocW StartDoc;
	alias WINAPI.SystemParametersInfoW SystemParametersInfo;
	alias WINAPI.TranslateAcceleratorW TranslateAccelerator;
	alias WINAPI.UnregisterClassW UnregisterClass;
	alias WINAPI.VkKeyScanW VkKeyScan;
}
    
    
    
    
    
    
/** All Natives */
alias WINAPI.AbortDoc AbortDoc;
alias WINAPI.ActivateKeyboardLayout ActivateKeyboardLayout;
alias WINAPI.AdjustWindowRectEx AdjustWindowRectEx;
alias WINAPI.Arc Arc;
alias WINAPI.BeginDeferWindowPos BeginDeferWindowPos;
alias WINAPI.BeginPaint BeginPaint;
alias WINAPI.BitBlt BitBlt;
alias WINAPI.BringWindowToTop BringWindowToTop;
alias WINAPI.CallNextHookEx CallNextHookEx;
alias WINAPI.CallWindowProcA CallWindowProcA;
alias WINAPI.CallWindowProcW CallWindowProcW;
alias WINAPI.CharLowerA CharLowerA;
alias WINAPI.CharLowerW CharLowerW;
alias WINAPI.CharUpperA CharUpperA;
alias WINAPI.CharUpperW CharUpperW;
alias WINAPI.CheckMenuItem CheckMenuItem;
alias WINAPI.ChooseColorA ChooseColorA;
alias WINAPI.ChooseColorW ChooseColorW;
alias WINAPI.ChooseFontA ChooseFontA;
alias WINAPI.ChooseFontW ChooseFontW;
alias WINAPI.ClientToScreen ClientToScreen;
alias WINAPI.CloseHandle CloseHandle;
alias WINAPI.CloseClipboard CloseClipboard;
alias WINAPI.CombineRgn CombineRgn;
alias DWINAPI.CommDlgExtendedError CommDlgExtendedError;

version(WinCE){
alias WINAPI.CommandBar_AddAdornments CommandBar_AddAdornments;
alias WINAPI.CommandBar_Create CommandBar_Create;
alias WINAPI.CommandBar_Destroy CommandBar_Destroy;
alias WINAPI.CommandBar_DrawMenuBar CommandBar_DrawMenuBar;
alias WINAPI.CommandBar_Height CommandBar_Height;
alias WINAPI.CommandBar_InsertMenubarEx CommandBar_InsertMenubarEx;
alias WINAPI.CommandBar_Show CommandBar_Show;
}

alias WINAPI.CopyImage CopyImage;
alias WINAPI.CreateAcceleratorTableA CreateAcceleratorTableA;
alias WINAPI.CreateAcceleratorTableW CreateAcceleratorTableW;
alias WINAPI.CreateBitmap CreateBitmap;
alias WINAPI.CreateCaret CreateCaret;
alias WINAPI.CreateCompatibleBitmap CreateCompatibleBitmap;
alias WINAPI.CreateCompatibleDC CreateCompatibleDC;
alias WINAPI.CreateCursor CreateCursor;
alias WINAPI.CreateDCA CreateDCA;
alias WINAPI.CreateDCW CreateDCW;
alias WINAPI.CreateDIBSection CreateDIBSection;
alias WINAPI.CreateEventA CreateEventA;
alias WINAPI.CreateEventW CreateEventW;
alias WINAPI.CreateFileA CreateFileA;
alias WINAPI.CreateFileW CreateFileW;
alias WINAPI.CreateFontIndirectA CreateFontIndirectA;
alias WINAPI.CreateFontIndirectW CreateFontIndirectW;
alias WINAPI.CreateIconIndirect CreateIconIndirect;
alias WINAPI.CreateMenu CreateMenu;
alias WINAPI.CreatePalette CreatePalette;
alias WINAPI.CreatePatternBrush CreatePatternBrush;
alias WINAPI.CreatePen CreatePen;
alias WINAPI.CreatePolygonRgn CreatePolygonRgn;
alias WINAPI.CreatePopupMenu CreatePopupMenu;
alias WINAPI.CreateRectRgn CreateRectRgn;
alias WINAPI.CreateSolidBrush CreateSolidBrush;
alias WINAPI.CreateWindowExA CreateWindowExA;
alias WINAPI.CreateWindowExW CreateWindowExW;
alias WINAPI.DefFrameProcA DefFrameProcA;
alias WINAPI.DefFrameProcW DefFrameProcW;
alias WINAPI.DefMDIChildProcA DefMDIChildProcA;
alias WINAPI.DefMDIChildProcW DefMDIChildProcW;
alias WINAPI.DefWindowProcA DefWindowProcA;
alias WINAPI.DefWindowProcW DefWindowProcW;
alias WINAPI.DeferWindowPos DeferWindowPos;
alias WINAPI.DeleteDC DeleteDC;
alias WINAPI.DeleteMenu DeleteMenu;
alias WINAPI.DeleteObject DeleteObject;
alias WINAPI.DestroyAcceleratorTable DestroyAcceleratorTable;
alias WINAPI.DestroyCaret DestroyCaret;
alias WINAPI.DestroyCursor DestroyCursor;
alias WINAPI.DestroyIcon DestroyIcon;
alias WINAPI.DestroyMenu DestroyMenu;
alias WINAPI.DestroyWindow DestroyWindow;
alias WINAPI.DispatchMessageA DispatchMessageA;
alias WINAPI.DispatchMessageW DispatchMessageW;
alias WINAPI.DragDetect DragDetect;
alias WINAPI.DragFinish DragFinish;
alias WINAPI.DragQueryFileA DragQueryFileA;
alias WINAPI.DragQueryFileW DragQueryFileW;
alias WINAPI.DrawEdge DrawEdge;
alias WINAPI.DrawFocusRect DrawFocusRect;
alias WINAPI.DrawFrameControl DrawFrameControl;
alias WINAPI.DrawIconEx DrawIconEx;
alias WINAPI.DrawMenuBar DrawMenuBar;
alias WINAPI.DrawStateA DrawStateA;
alias WINAPI.DrawStateW DrawStateW;
alias WINAPI.DrawTextA DrawTextA;
alias WINAPI.DrawTextW DrawTextW;
alias WINAPI.Ellipse Ellipse;
alias WINAPI.EnableMenuItem EnableMenuItem;
alias WINAPI.EnableScrollBar EnableScrollBar;
alias WINAPI.EnableWindow EnableWindow;
alias WINAPI.EndDeferWindowPos EndDeferWindowPos;
alias WINAPI.EndDoc EndDoc;
alias WINAPI.EndPage EndPage;
alias WINAPI.EndPaint EndPaint;
alias WINAPI.EnumDisplayMonitors EnumDisplayMonitors;
alias WINAPI.EnumFontFamiliesA EnumFontFamiliesA;
alias WINAPI.EnumFontFamiliesExA EnumFontFamiliesExA;
alias WINAPI.EnumFontFamiliesExW EnumFontFamiliesExW;
alias WINAPI.EnumFontFamiliesW EnumFontFamiliesW;
alias DWINAPI.EnumSystemLanguageGroupsA EnumSystemLanguageGroupsA;
alias DWINAPI.EnumSystemLanguageGroupsW EnumSystemLanguageGroupsW;
alias WINAPI.EnumSystemLocalesA EnumSystemLocalesA;
alias WINAPI.EnumSystemLocalesW EnumSystemLocalesW;
alias WINAPI.EqualRect EqualRect;
alias WINAPI.EqualRgn EqualRgn;
alias WINAPI.ExpandEnvironmentStringsA ExpandEnvironmentStringsA;
alias WINAPI.ExpandEnvironmentStringsW ExpandEnvironmentStringsW;
alias WINAPI.ExtTextOutA ExtTextOutA;
alias WINAPI.ExtTextOutW ExtTextOutW;
alias DWINAPI.ExtractIconExA ExtractIconExA;
alias DWINAPI.ExtractIconExW ExtractIconExW;
alias WINAPI.FillRect FillRect;
alias WINAPI.FindResourceA FindResourceA;
alias WINAPI.FindResourceW FindResourceW;
alias WINAPI.FindWindowA FindWindowA;
alias WINAPI.FindWindowW FindWindowW;
alias WINAPI.FormatMessageA FormatMessageA;
alias WINAPI.FormatMessageW FormatMessageW;
alias WINAPI.FreeLibrary FreeLibrary;
alias WINAPI.GdiSetBatchLimit GdiSetBatchLimit;
alias WINAPI.GetACP GetACP;
alias WINAPI.GetActiveWindow GetActiveWindow;
alias WINAPI.GetBkColor GetBkColor;
alias WINAPI.GetCapture GetCapture;
alias WINAPI.GetCaretPos GetCaretPos;
alias WINAPI.GetCharABCWidthsA GetCharABCWidthsA;
alias WINAPI.GetCharABCWidthsW GetCharABCWidthsW;
alias WINAPI.GetCharWidthA GetCharWidthA;
alias WINAPI.GetCharWidthW GetCharWidthW;
alias WINAPI.GetCharacterPlacementA GetCharacterPlacementA;
alias WINAPI.GetCharacterPlacementW GetCharacterPlacementW;
alias WINAPI.GetClassInfoA GetClassInfoA;
alias WINAPI.GetClassInfoW GetClassInfoW;
alias WINAPI.GetClientRect GetClientRect;
alias WINAPI.GetClipBox GetClipBox;
alias WINAPI.GetClipRgn GetClipRgn;
alias WINAPI.GetClipboardData GetClipboardData;
alias WINAPI.GetClipboardFormatNameA GetClipboardFormatNameA;
alias WINAPI.GetClipboardFormatNameW GetClipboardFormatNameW;
alias DWINAPI.GetComboBoxInfo GetComboBoxInfo;
alias WINAPI.GetCurrentObject GetCurrentObject;
alias WINAPI.GetCurrentProcessId GetCurrentProcessId;
alias WINAPI.GetCurrentThreadId GetCurrentThreadId;
alias WINAPI.GetCursor GetCursor;
alias WINAPI.GetCursorPos GetCursorPos;
alias WINAPI.GetDC GetDC;
alias WINAPI.GetDCEx GetDCEx;
alias WINAPI.GetDIBColorTable GetDIBColorTable;
alias WINAPI.GetDIBits GetDIBits;
alias WINAPI.GetDesktopWindow GetDesktopWindow;
alias WINAPI.GetDeviceCaps GetDeviceCaps;
alias WINAPI.GetDialogBaseUnits GetDialogBaseUnits;
alias WINAPI.GetDlgItem GetDlgItem;
alias WINAPI.GetDoubleClickTime GetDoubleClickTime;
alias WINAPI.GetFocus GetFocus;
alias WINAPI.GetFontLanguageInfo GetFontLanguageInfo;
alias DWINAPI.GetGUIThreadInfo GetGUIThreadInfo;
alias WINAPI.GetIconInfo GetIconInfo;
alias WINAPI.GetKeyNameTextA GetKeyNameTextA;
alias WINAPI.GetKeyNameTextW GetKeyNameTextW;
alias WINAPI.GetKeyState GetKeyState;
alias WINAPI.GetKeyboardLayout GetKeyboardLayout;
alias WINAPI.GetKeyboardLayoutList GetKeyboardLayoutList;
alias WINAPI.GetKeyboardState GetKeyboardState;
alias WINAPI.GetLastActivePopup GetLastActivePopup;
alias WINAPI.GetLastError GetLastError;
alias DWINAPI.GetLayout GetLayout;
alias WINAPI.GetLocaleInfoA GetLocaleInfoA;
alias WINAPI.GetLocaleInfoW GetLocaleInfoW;
alias WINAPI.GetMenu GetMenu;
alias DWINAPI.GetMenuBarInfo GetMenuBarInfo;
alias WINAPI.GetMenuDefaultItem GetMenuDefaultItem;
alias DWINAPI.GetMenuInfo GetMenuInfo;
alias WINAPI.GetMenuItemCount GetMenuItemCount;
alias WINAPI.GetMenuItemInfoA GetMenuItemInfoA;
alias WINAPI.GetMenuItemInfoW GetMenuItemInfoW;
alias WINAPI.GetMenuItemRect GetMenuItemRect;
alias WINAPI.GetMessageA GetMessageA;
alias WINAPI.GetMessagePos GetMessagePos;
alias WINAPI.GetMessageTime GetMessageTime;
alias WINAPI.GetMessageW GetMessageW;
alias WINAPI.GetModuleFileNameA GetModuleFileNameA;
alias WINAPI.GetModuleFileNameW GetModuleFileNameW;
alias WINAPI.GetModuleHandleA GetModuleHandleA;
alias WINAPI.GetModuleHandleW GetModuleHandleW;
alias WINAPI.GetMonitorInfoA GetMonitorInfoA;
alias DWINAPI.GetMonitorInfoW GetMonitorInfoW;
alias WINAPI.GetNearestPaletteIndex GetNearestPaletteIndex;
alias WINAPI.GetObjectA GetObjectA;
alias WINAPI.GetObjectW GetObjectW;
alias WINAPI.GetOpenFileNameA GetOpenFileNameA;
alias WINAPI.GetOpenFileNameW GetOpenFileNameW;
alias WINAPI.GetPaletteEntries GetPaletteEntries;
alias WINAPI.GetParent GetParent;
alias WINAPI.GetPixel GetPixel;
alias WINAPI.GetProcAddress GetProcAddress;
alias WINAPI.GetProcessHeap GetProcessHeap;
alias WINAPI.GetProfileStringA GetProfileStringA;
alias WINAPI.GetProfileStringW GetProfileStringW;
alias WINAPI.GetROP2 GetROP2;
alias DWINAPI.GetRandomRgn GetRandomRgn;
alias WINAPI.GetRegionData GetRegionData;
alias WINAPI.GetRgnBox GetRgnBox;
alias WINAPI.GetSaveFileNameA GetSaveFileNameA;
alias WINAPI.GetSaveFileNameW GetSaveFileNameW;
alias WINAPI.GetScrollInfo GetScrollInfo;
alias WINAPI.GetStockObject GetStockObject;
alias WINAPI.GetSysColor GetSysColor;
alias WINAPI.GetSysColorBrush GetSysColorBrush;
alias WINAPI.GetSystemMenu GetSystemMenu;
alias WINAPI.GetSystemMetrics GetSystemMetrics;
alias WINAPI.GetSystemPaletteEntries GetSystemPaletteEntries;
alias WINAPI.GetTextCharset GetTextCharset;
alias WINAPI.GetTextColor GetTextColor;
alias WINAPI.GetTextExtentPoint32A GetTextExtentPoint32A;
alias WINAPI.GetTextExtentPoint32W GetTextExtentPoint32W;
alias WINAPI.GetTextMetricsA GetTextMetricsA;
alias WINAPI.GetTextMetricsW GetTextMetricsW;
alias WINAPI.GetTickCount GetTickCount;
alias WINAPI.GetUpdateRect GetUpdateRect;
alias WINAPI.GetUpdateRgn GetUpdateRgn;
alias WINAPI.GetVersion GetVersion;
alias WINAPI.GetVersionExA GetVersionExA;
alias WINAPI.GetVersionExW GetVersionExW;
alias WINAPI.GetWindow GetWindow;
alias WINAPI.GetWindowLongA GetWindowLongA;
alias WINAPI.GetWindowLongW GetWindowLongW;
alias WINAPI.GetWindowPlacement GetWindowPlacement;
alias WINAPI.GetWindowRect GetWindowRect;
alias WINAPI.GetWindowRgn GetWindowRgn;
alias WINAPI.GetWindowTextA GetWindowTextA;
alias WINAPI.GetWindowTextLengthA GetWindowTextLengthA;
alias WINAPI.GetWindowTextLengthW GetWindowTextLengthW;
alias WINAPI.GetWindowTextW GetWindowTextW;
alias WINAPI.GetWindowThreadProcessId GetWindowThreadProcessId;
alias WINAPI.GlobalAlloc GlobalAlloc;
alias WINAPI.GlobalFree GlobalFree;
alias WINAPI.GlobalLock GlobalLock;
alias WINAPI.GlobalSize GlobalSize;
alias WINAPI.GlobalUnlock GlobalUnlock;
alias DWINAPI.GradientFill GradientFill;
alias WINAPI.HeapAlloc HeapAlloc;
alias WINAPI.HeapFree HeapFree;
alias WINAPI.HideCaret HideCaret;
alias WINAPI.ImageList_Add ImageList_Add;
alias WINAPI.ImageList_AddMasked ImageList_AddMasked;
alias WINAPI.ImageList_Create ImageList_Create;
alias WINAPI.ImageList_Destroy ImageList_Destroy;
alias WINAPI.ImageList_GetIcon ImageList_GetIcon;
alias WINAPI.ImageList_GetIconSize ImageList_GetIconSize;
alias WINAPI.ImageList_GetImageCount ImageList_GetImageCount;
alias WINAPI.ImageList_Remove ImageList_Remove;
alias WINAPI.ImageList_Replace ImageList_Replace;
alias WINAPI.ImageList_ReplaceIcon ImageList_ReplaceIcon;
alias WINAPI.ImageList_SetIconSize ImageList_SetIconSize;
alias DWINAPI.ImmAssociateContext ImmAssociateContext;
alias DWINAPI.ImmCreateContext ImmCreateContext;
alias DWINAPI.ImmDestroyContext ImmDestroyContext;
alias DWINAPI.ImmGetCompositionFontA ImmGetCompositionFontA;
alias DWINAPI.ImmGetCompositionFontW ImmGetCompositionFontW;
alias DWINAPI.ImmGetCompositionStringA ImmGetCompositionStringA;
alias DWINAPI.ImmGetCompositionStringW ImmGetCompositionStringW;
alias DWINAPI.ImmGetContext ImmGetContext;
alias DWINAPI.ImmGetConversionStatus ImmGetConversionStatus;
alias DWINAPI.ImmGetDefaultIMEWnd ImmGetDefaultIMEWnd;
alias DWINAPI.ImmGetOpenStatus ImmGetOpenStatus;
alias DWINAPI.ImmReleaseContext ImmReleaseContext;
alias DWINAPI.ImmSetCompositionFontA ImmSetCompositionFontA;
alias DWINAPI.ImmSetCompositionFontW ImmSetCompositionFontW;
alias DWINAPI.ImmSetCompositionWindow ImmSetCompositionWindow;
alias DWINAPI.ImmSetConversionStatus ImmSetConversionStatus;
alias DWINAPI.ImmSetOpenStatus ImmSetOpenStatus;
alias DWINAPI.InitCommonControls InitCommonControls;
alias DWINAPI.InitCommonControlsEx InitCommonControlsEx;
alias WINAPI.InsertMenuA InsertMenuA;
alias WINAPI.InsertMenuItemA InsertMenuItemA;
alias WINAPI.InsertMenuItemW InsertMenuItemW;
alias WINAPI.InsertMenuW InsertMenuW;
alias WINAPI.InterlockedDecrement InterlockedDecrement;
alias WINAPI.InterlockedIncrement InterlockedIncrement;
alias WINAPI.IntersectRect IntersectRect;
alias WINAPI.InvalidateRect InvalidateRect;
alias WINAPI.InvalidateRgn InvalidateRgn;
alias WINAPI.IsDBCSLeadByte IsDBCSLeadByte;
alias WINAPI.IsIconic IsIconic;
alias WINAPI.IsWindow IsWindow;
alias WINAPI.IsWindowEnabled IsWindowEnabled;
alias WINAPI.IsWindowVisible IsWindowVisible;
alias WINAPI.IsZoomed IsZoomed;
alias WINAPI.KillTimer KillTimer;
alias WINAPI.LineTo LineTo;
alias WINAPI.LoadBitmapA LoadBitmapA;
alias WINAPI.LoadBitmapW LoadBitmapW;
alias WINAPI.LoadCursorA LoadCursorA;
alias WINAPI.LoadCursorW LoadCursorW;
alias WINAPI.LoadIconA LoadIconA;
alias WINAPI.LoadIconW LoadIconW;
alias WINAPI.LoadImageA LoadImageA;
alias WINAPI.LoadImageW LoadImageW;
alias WINAPI.LoadLibraryA LoadLibraryA;
alias WINAPI.LoadLibraryW LoadLibraryW;
alias WINAPI.LoadResource LoadResource;
alias WINAPI.LoadStringA LoadStringA;
alias WINAPI.LoadStringW LoadStringW;
alias WINAPI.LocalFree LocalFree;
alias WINAPI.LockResource LockResource;
alias WINAPI.MapVirtualKeyA MapVirtualKeyA;
alias WINAPI.MapVirtualKeyW MapVirtualKeyW;
alias WINAPI.MapWindowPoints MapWindowPoints;
alias WINAPI.MessageBeep MessageBeep;
alias WINAPI.MessageBoxA MessageBoxA;
alias WINAPI.MessageBoxW MessageBoxW;
alias DWINAPI.MonitorFromWindow MonitorFromWindow;
alias WINAPI.MoveToEx MoveToEx;
alias DWINAPI.MsgWaitForMultipleObjectsEx MsgWaitForMultipleObjectsEx;
alias WINAPI.MultiByteToWideChar MultiByteToWideChar;
alias DWINAPI.NotifyWinEvent NotifyWinEvent;
alias WINAPI.OffsetRgn OffsetRgn;
//alias WINAPI.OleInitialize OleInitialize;
//alias WINAPI.OleUninitialize OleUninitialize;
alias WINAPI.OpenClipboard OpenClipboard;
alias WINAPI.OutputDebugStringA OutputDebugStringA;
alias WINAPI.OutputDebugStringW OutputDebugStringW;
alias WINAPI.PatBlt PatBlt;
alias WINAPI.PeekMessageA PeekMessageA;
alias WINAPI.PeekMessageW PeekMessageW;
alias WINAPI.Pie Pie;
alias WINAPI.Polygon Polygon;
alias WINAPI.Polyline Polyline;
alias WINAPI.PostMessageA PostMessageA;
alias WINAPI.PostMessageW PostMessageW;
alias WINAPI.PostThreadMessageA PostThreadMessageA;
alias WINAPI.PostThreadMessageW PostThreadMessageW;
alias WINAPI.PrintDlgA PrintDlgA;
alias WINAPI.PrintDlgW PrintDlgW;
alias WINAPI.PtInRect PtInRect;
alias WINAPI.PtInRegion PtInRegion;
alias WINAPI.RealizePalette RealizePalette;
alias WINAPI.RectInRegion RectInRegion;
// <Shawn> Renamed : may conflict with dwt.graphics.rectangle.Rectangle
alias WINAPI.Rectangle _Rectangle;	
alias WINAPI.RedrawWindow RedrawWindow;
alias WINAPI.RegCloseKey RegCloseKey;
alias WINAPI.RegEnumKeyExA RegEnumKeyExA;
alias WINAPI.RegEnumKeyExW RegEnumKeyExW;
alias WINAPI.RegOpenKeyExA RegOpenKeyExA;
alias WINAPI.RegOpenKeyExW RegOpenKeyExW;
alias WINAPI.RegQueryInfoKeyA RegQueryInfoKeyA;
alias WINAPI.RegQueryInfoKeyW RegQueryInfoKeyW;
alias WINAPI.RegQueryValueExA RegQueryValueExA;
alias WINAPI.RegQueryValueExW RegQueryValueExW;
alias WINAPI.RegisterClassA RegisterClassA;
alias WINAPI.RegisterClassW RegisterClassW;
alias WINAPI.RegisterClipboardFormatA RegisterClipboardFormatA;
alias WINAPI.RegisterClipboardFormatW RegisterClipboardFormatW;
alias WINAPI.RegisterWindowMessageA RegisterWindowMessageA;
alias WINAPI.RegisterWindowMessageW RegisterWindowMessageW;
alias WINAPI.ReleaseCapture ReleaseCapture;
alias WINAPI.ReleaseDC ReleaseDC;
alias WINAPI.RemoveMenu RemoveMenu;
alias WINAPI.RestoreDC RestoreDC;
alias WINAPI.RoundRect RoundRect;
alias DWINAPI.RtlMoveMemory MoveMemory;
alias DWINAPI.SHBrowseForFolderA SHBrowseForFolderA;
alias DWINAPI.SHBrowseForFolderW SHBrowseForFolderW;
version(WinCE){
	alias WINAPI.SHCreateMenuBar SHCreateMenuBar;
}
alias DWINAPI.SHGetMalloc SHGetMalloc;
alias DWINAPI.SHGetPathFromIDListA SHGetPathFromIDListA;
alias DWINAPI.SHGetPathFromIDListW SHGetPathFromIDListW;
version(WinCE)
{
	alias WINAPI.SHHandleWMSettingChange SHHandleWMSettingChange;
	alias WINAPI.SHRecognizeGesture SHRecognizeGesture;
	alias WINAPI.SHSendBackToFocusWindow SHSendBackToFocusWindow;
	alias WINAPI.SHSetAppKeyWndAssoc SHSetAppKeyWndAssoc;
	alias WINAPI.SHSipPreference SHSipPreference;
}
alias WINAPI.SaveDC SaveDC;
alias WINAPI.ScreenToClient ScreenToClient;
alias DWINAPI.ScriptBreak ScriptBreak;
alias DWINAPI.ScriptCPtoX ScriptCPtoX;
alias DWINAPI.ScriptCacheGetHeight ScriptCacheGetHeight;
alias DWINAPI.ScriptFreeCache ScriptFreeCache;
alias DWINAPI.ScriptGetFontProperties ScriptGetFontProperties;
alias DWINAPI.ScriptGetLogicalWidths ScriptGetLogicalWidths;
alias DWINAPI.ScriptGetProperties ScriptGetProperties;
alias DWINAPI.ScriptItemize ScriptItemize;
alias DWINAPI.ScriptLayout ScriptLayout;
alias DWINAPI.ScriptPlace ScriptPlace;
alias DWINAPI.ScriptShape ScriptShape;
alias DWINAPI.ScriptTextOut ScriptTextOut;
alias DWINAPI.ScriptXtoCP ScriptXtoCP;
alias WINAPI.ScrollWindowEx ScrollWindowEx;
alias WINAPI.SelectClipRgn SelectClipRgn;
alias WINAPI.SelectObject SelectObject;
alias WINAPI.SelectPalette SelectPalette;
alias DWINAPI.SendInput SendInput;
alias WINAPI.SendMessageA SendMessageA;
alias WINAPI.SendMessageW SendMessageW;
alias WINAPI.SetActiveWindow SetActiveWindow;
alias WINAPI.SetBkColor SetBkColor;
alias WINAPI.SetBkMode SetBkMode;
alias WINAPI.SetCapture SetCapture;
alias WINAPI.SetCaretPos SetCaretPos;
alias WINAPI.SetClipboardData SetClipboardData;
alias WINAPI.SetCursor SetCursor;
alias WINAPI.SetCursorPos SetCursorPos;
alias WINAPI.SetDIBColorTable SetDIBColorTable;
alias WINAPI.SetErrorMode SetErrorMode;
alias WINAPI.SetEvent SetEvent;
alias WINAPI.SetFocus SetFocus;
alias WINAPI.SetForegroundWindow SetForegroundWindow;
alias WINAPI.SetLastError SetLastError;
alias DWINAPI.SetLayout SetLayout;
alias WINAPI.SetMenu SetMenu;
alias WINAPI.SetMenuDefaultItem SetMenuDefaultItem;
alias DWINAPI.SetMenuInfo SetMenuInfo;
alias WINAPI.SetMenuItemInfoA SetMenuItemInfoA;
alias WINAPI.SetMenuItemInfoW SetMenuItemInfoW;
alias WINAPI.SetPaletteEntries SetPaletteEntries;
alias WINAPI.SetParent SetParent;
alias WINAPI.SetPixel SetPixel;
alias WINAPI.SetROP2 SetROP2;
alias WINAPI.SetRect SetRect;
alias WINAPI.SetRectRgn SetRectRgn;
alias WINAPI.SetScrollInfo SetScrollInfo;
alias WINAPI.SetStretchBltMode SetStretchBltMode;
alias WINAPI.SetTextAlign SetTextAlign;
alias WINAPI.SetTextColor SetTextColor;
alias WINAPI.SetTimer SetTimer;
alias WINAPI.SetWindowLongA SetWindowLongA;
alias WINAPI.SetWindowLongW SetWindowLongW;
alias WINAPI.SetWindowPlacement SetWindowPlacement;
alias WINAPI.SetWindowPos SetWindowPos;
alias WINAPI.SetWindowRgn SetWindowRgn;
alias WINAPI.SetWindowTextA SetWindowTextA;
alias WINAPI.SetWindowTextW SetWindowTextW;
alias WINAPI.SetWindowsHookExA SetWindowsHookExA;
alias WINAPI.SetWindowsHookExW SetWindowsHookExW;
alias DWINAPI.ShellExecuteExA ShellExecuteExA;
alias DWINAPI.ShellExecuteExW ShellExecuteExW;
alias DWINAPI.Shell_NotifyIconA Shell_NotifyIconA;
alias DWINAPI.Shell_NotifyIconW Shell_NotifyIconW;
alias WINAPI.ShowCaret ShowCaret;
alias WINAPI.ShowOwnedPopups ShowOwnedPopups;
alias WINAPI.ShowScrollBar ShowScrollBar;
alias WINAPI.ShowWindow ShowWindow;
version(WinCE){
alias WINAPI.SipGetInfo SipGetInfo;
}
alias WINAPI.SizeofResource SizeofResource;
alias WINAPI.Sleep Sleep;
alias WINAPI.StartDocA StartDocA;
alias WINAPI.StartDocW StartDocW;
alias WINAPI.StartPage StartPage;
alias WINAPI.StretchBlt StretchBlt;
alias WINAPI.SystemParametersInfoA SystemParametersInfoA;
alias WINAPI.SystemParametersInfoW SystemParametersInfoW;
alias WINAPI.ToAscii ToAscii;
alias WINAPI.ToUnicode ToUnicode;
alias DWINAPI.TrackMouseEvent TrackMouseEvent;
alias WINAPI.TrackPopupMenu TrackPopupMenu;
alias WINAPI.TranslateAcceleratorA TranslateAcceleratorA;
alias WINAPI.TranslateAcceleratorW TranslateAcceleratorW;
alias WINAPI.TranslateCharsetInfo TranslateCharsetInfo;
alias WINAPI.TranslateMDISysAccel TranslateMDISysAccel;
alias WINAPI.TranslateMessage TranslateMessage;
version(WinCE){
	alias WINAPI.TransparentImage TransparentImage;
}
alias WINAPI.UnhookWindowsHookEx UnhookWindowsHookEx;
alias WINAPI.UnregisterClassA UnregisterClassA;
alias WINAPI.UnregisterClassW UnregisterClassW;
alias WINAPI.UpdateWindow UpdateWindow;
alias WINAPI.ValidateRect ValidateRect;
alias WINAPI.VkKeyScanA VkKeyScanA;
alias WINAPI.VkKeyScanW VkKeyScanW;
alias WINAPI.WaitForMultipleObjects WaitForMultipleObjects;
alias WINAPI.WaitForSingleObject WaitForSingleObject;
alias WINAPI.WaitMessage WaitMessage;
alias WINAPI.WideCharToMultiByte WideCharToMultiByte;
alias WINAPI.WindowFromDC WindowFromDC;
alias WINAPI.WindowFromPoint WindowFromPoint;
alias DWINAPI.wcslen wcslen;

public static int VERSION (int major, int minor) {	return major << 16 | minor;}

//static int DrawText(int hDC, String lpString, RECT* lpRect, int uFormat){
//	return WINAPI.DrawText(hDC, Convert.StringToTCHARz(lpString), lpString.length, lpRect, uFormat);
//}
//
//static int DrawText(int hDC, TCHAR* lpString, int length, RECT* lpRect, int uFormat){
//	return WINAPI.DrawText(hDC, lpString, length, lpRect, uFormat);
//}

static int GetProfileString(char[] lpAppName, char[] lpKeyName, char[] lpDefault, out char[] lpReturnedString, int nSize ){
	TCHAR[] buffer = new TCHAR[nSize];
	int result = _GetProfileString(Converter.StrToTCHARz(lpAppName), Converter.StrToTCHARz(lpKeyName), Converter.StrToTCHARz(lpDefault), buffer.ptr, nSize);
	lpReturnedString = Converter.TCHARzToStr(buffer.ptr);
	return result;	
}

static char[] GetWindowText(HWND hwnd){
	assert(hwnd); 
	int len = GetWindowTextLength(hwnd);
	if(len > 0){
		TCHAR[] buffer = new TCHAR[len + 1];
		len = _GetWindowText(hwnd, buffer.ptr, buffer.length);
		return Converter.TCHARzToStr(buffer.ptr, len);
	}
	return "";
}

// Note: nMaxCount including the NULL character
static int GetWindowText(HWND hWnd, TCHAR* lpString, int nMaxCount)
{
	return _GetWindowText(hWnd, lpString, nMaxCount);
}

// <Shawn Liu> added this method, copied from ATL : atlwin.h 
static int CenterWindow(HWND m_hWnd, HWND hWndCenter = null)
{
	assert(m_hWnd);
	
	// determine owner window to center against
	uint dwStyle = OS.GetWindowLong(m_hWnd, OS.GWL_STYLE);
	if(hWndCenter is null)
	{
		if(dwStyle & OS.WS_CHILD)
			hWndCenter = OS.GetParent(m_hWnd);
		else
			hWndCenter = OS.GetWindow(m_hWnd, OS.GW_OWNER);
	}

	// get coordinates of the window relative to its parent
	RECT rcDlg;
	OS.GetWindowRect(m_hWnd, &rcDlg);
	RECT rcArea;
	RECT rcCenter;
	HWND hWndParent;
	if(!(dwStyle & OS.WS_CHILD))
	{
		// don't center against invisible or minimized WINAPI 
		if(hWndCenter !is null)
		{
			uint dwStyleCenter = OS.GetWindowLong(hWndCenter, OS.GWL_STYLE);
			if(!(dwStyleCenter & OS.WS_VISIBLE) || (dwStyleCenter & OS.WS_MINIMIZE))
				hWndCenter = null;
		}

		// center within screen coordinates
		OS.SystemParametersInfo(OS.SPI_GETWORKAREA, 0, &rcArea, 0);
		if(hWndCenter is null)
			rcCenter = rcArea;
		else
			OS.GetWindowRect(hWndCenter, &rcCenter);
	}
	else
	{
		// center within parent client coordinates
		hWndParent = OS.GetParent(m_hWnd);
		assert(OS.IsWindow(hWndParent));

		OS.GetClientRect(hWndParent, &rcArea);
		assert(OS.IsWindow(hWndCenter));
		OS.GetClientRect(hWndCenter, &rcCenter);
		OS.MapWindowPoints(hWndCenter, hWndParent, cast(POINT*)&rcCenter, 2);
	}

	int DlgWidth = rcDlg.right - rcDlg.left;
	int DlgHeight = rcDlg.bottom - rcDlg.top;

	// find dialog's upper left based on rcCenter
	int xLeft = (rcCenter.left + rcCenter.right) / 2 - DlgWidth / 2;
	int yTop = (rcCenter.top + rcCenter.bottom) / 2 - DlgHeight / 2;

	// if the dialog is outside the screen, move it inside
	if(xLeft < rcArea.left)
		xLeft = rcArea.left;
	else if(xLeft + DlgWidth > rcArea.right)
		xLeft = rcArea.right - DlgWidth;

	if(yTop < rcArea.top)
		yTop = rcArea.top;
	else if(yTop + DlgHeight > rcArea.bottom)
		yTop = rcArea.bottom - DlgHeight;

	// map screen coordinates to child coordinates
	return OS.SetWindowPos(m_hWnd, null, xLeft, yTop, -1, -1,
		OS.SWP_NOSIZE | OS.SWP_NOZORDER | OS.SWP_NOACTIVATE);	
}

static int OleInitialize(LPVOID reserved = null){
	return DWINAPI.OleInitialize(reserved);
}

static void OleUninitialize(){
	DWINAPI.OleUninitialize();
}

} // end of class OS

